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简单连接MongoDB数据库的方法
Mar 15 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
记录Python脚本的运行日志的方法
Jun 05 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
Python中os模块功能与用法详解
Feb 26 Python
Python类和实例的属性机制原理详解
Mar 21 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
python 获取字典特定值对应的键的实现
Sep 29 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
Jan 29 Python
python可视化之颜色映射详解
Sep 15 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
自己动手做一个SQL解释器
2006/10/09 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
python中的装饰器详解
2015/04/13 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python3如何将docx转换成pdf文件
2018/03/23 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
会计毕业生求职简历的自我评价
2013/10/20 职场文书
物业管理工作方案
2014/05/10 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
档案接收函格式
2015/01/30 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
导游词之井冈山
2019/11/20 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android