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爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
python入门前的第一课 python怎样入门
Mar 06 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
python仿evething的文件搜索器实例代码
May 13 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
如何使用repr调试python程序
Feb 28 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 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
php5.3 注意事项说明
2013/07/01 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
中文字符串截取的js函数代码
2013/04/17 Javascript
javascript if条件判断方法小结
2014/05/17 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
python多线程扫描端口(线程池)
2019/09/04 Python
python学生管理系统的实现
2020/04/05 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
几个Shell Script面试题
2014/04/18 面试题
毕业生自我鉴定
2013/11/05 职场文书
毕业自我鉴定
2013/11/05 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
数学系毕业生求职信
2014/05/29 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
离职证明格式样本
2015/06/12 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
关于JavaScript轮播图的实现
2021/11/20 Javascript