python 使用MethodType绑定方法到类
来源:互联网 发布:python 日志时间格式 编辑:程序博客网 时间:2024/05/21 06:47
问题引出
先看下面一段代码:
<span style="font-size:14px;">from types import MethodTypedef set_age(self,age): self.age=ageclass Stu(object): passStu.set_age=MethodType(set_age,Stu)A=Stu()B=Stu()A.set_age(10)B.set_age(15)print(A.age,B.age)#结果都是15</span>
运行这段代码我们会发现输出结果都是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中静态变量的意思
0 0
- python 使用MethodType绑定方法到类
- python 使用MethodType绑定方法到类
- 动态绑定方法 MethodType()
- python MethodType方法详解和使用
- python 中MethodType方法详解和使用
- python进阶14:实例方法和类方法、types.MethodType()
- python MethodType
- python中MethodType的使用解析
- python双下划线含义、MethodType把函数变为方法以及类继承
- 使用SWIG将C++绑定到python
- 使用SWIG将C++绑定到python
- Method 绑定方法到类
- python types模块MethodType的一个例子
- python类的绑定方法与非绑定方法
- 方法绑定到委托
- python3 位类动态添加方法 import types x=types.MethodType(要添加的方法名,对象名)
- 有关python给类绑定方法
- 关于python方法绑定
- [调试相关]预编译文件中宏定义打印日志
- Linux查找最近修改的文件
- MySql学习笔记-增删改查操作
- firefox插件(plugin)开发概述
- 第五周项目二 建立链栈算法库
- python 使用MethodType绑定方法到类
- 分析ClassLoader
- 52. N-Queens II
- bootstrap-datetimepicker日期插件使用
- Instruments User Guide编程指南5-Profile Your App's Memory Usage
- 数据结构总复习知识点
- Jquery 和 Js 获得元素标签名称的方法
- 判断App处于后台还是前台
- php 错误记录以及查看方式