python利用MethodType绑定方法到类示例代码


Posted in Python onAugust 27, 2017

前言

本文主要给大家介绍了关于python用MethodType绑定方法到类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

对python中MethodType不熟悉的朋友们可以先看看这篇文章

问题引出

先看下面一段代码:

from types import MethodType 
def set_age(self,age): 
 self.age=age 
class Stu(object): 
 pass 
Stu.set_age=MethodType(set_age,Stu) 
A=Stu() 
B=Stu() 
A.set_age(10) 
B.set_age(15) 
print(A.age,B.age)#结果都是15

运行这段代码我们会发现输出结果都是15,我们明明分别设置了A和B对象的属性值,为什么,会这样呢?开始我也有一样的疑问,后来发现是对MethodType的理解不够,经过查证,得到如下解释。

解析

Stu类本身并没有属性和方法,所以用这个类创建的实例也没有属性和方法。用MethodType将set_age方法绑定到Stu类,并不是将这个方法直接写到Stu类内部,而是在Stu内存中创建一个link指向外部的方法,在创建Stu实例的时候这个link也会被复制。所以不管创建多少实例,这些实例和Stu类都指向同一个set_age方法。A.set_age(10)并没有在A这个实例内部创建age属性,而是将age属性创建在外部set_age方法的内存区中。因为A和B内部link都指向外部set_age方法的内存区,所以不管A还是B在调用set_age方法的时候改变的是set_age方法内存区里的age属性,所以A改了B也就改了,如果新建一个实例C在没有调用set_age方法的前提下也会有age属性,因为C的link指向的set_age方法的内存区,而set_age之前被A或者B调用过了。

总结

大概意思就是通过这样绑定的方法设置的属性有点java中静态变量的意思

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Python itertools.product方法代码实例
Mar 27 Python
Python -m参数原理及使用方法解析
Aug 21 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
Python Numpy之linspace用法说明
Apr 17 Python
python运行脚本文件的三种方法实例
Jun 25 Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 #Python
python读取excel表格生成erlang数据
Aug 26 #Python
使用Python实现简单的服务器功能
Aug 25 #Python
详解Python实现多进程异步事件驱动引擎
Aug 25 #Python
python基础while循环及if判断的实例讲解
Aug 25 #Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 #Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 #Python
You might like
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
jQuery each()方法的使用方法
2010/03/18 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
跟老齐学Python之重回函数
2014/10/10 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
详解python之heapq模块及排序操作
2019/04/04 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
什么是python类属性
2020/06/10 Python
对孩子的寄语
2014/04/09 职场文书
项目建议书怎么写
2014/05/15 职场文书
访谈节目策划方案
2014/05/15 职场文书
人代会标语
2014/06/30 职场文书
员工辞职信范文
2015/03/02 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
律师函格式范本
2015/05/27 职场文书
会计主管竞聘书
2015/09/15 职场文书
《颐和园》教学反思
2016/02/19 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
Python如何使用循环结构和分支结构
2022/04/13 Python