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的math模块中的常用数学函数整理
Feb 04 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
python模糊图片过滤的方法
Dec 14 Python
Python实现简易过滤删除数字的方法小结
Jan 09 Python
python中的列表与元组的使用
Aug 08 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
python学生信息管理系统实现代码
Dec 17 Python
jupyter notebook 重装教程
Apr 16 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
python入门之算法学习
Apr 22 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
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
PHP session有效期问题
2009/04/26 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
Vue Element 分组+多选+可搜索Select选择器实现示例
2018/07/23 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
中国最大的团购网站:聚划算
2016/09/21 全球购物
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
专科毕业生自我鉴定
2013/12/01 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
暑期工社会实践报告
2015/07/13 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python