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对字典进行排序实例
Sep 25 Python
Python中操作MySQL入门实例
Feb 08 Python
详解Python编程中基本的数学计算使用
Feb 04 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
python+opencv轮廓检测代码解析
Jan 05 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
pycharm第三方库安装失败的问题及解决经验分享
May 09 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python中的对数log函数表示及用法
Dec 09 Python
python tkinter Entry控件的焦点移动操作
May 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操作mysql数据库的基本类代码
2014/02/25 PHP
php生成zip文件类实例
2015/04/07 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python中生成一个指定长度的随机字符串实现示例
2019/11/06 Python
Django choices下拉列表绑定实例
2020/03/13 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
股份合作协议书范本
2014/04/14 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
征求意见函
2015/06/05 职场文书
上帝也疯狂观后感
2015/06/09 职场文书