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实现对一个完整url进行分割的方法
Apr 29 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Django入门使用示例
Dec 12 Python
Python3 修改默认环境的方法
Feb 16 Python
Python数据类型之Dict字典实例详解
May 07 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
django-初始配置(纯手写)详解
Jul 30 Python
Django 请求Request的具体使用方法
Nov 11 Python
python实现横向拼接图片
Mar 23 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 Python
python使用shell脚本创建kafka连接器
Apr 29 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用户注册时常用的检验函数实例总结
2014/12/22 PHP
php图片裁剪函数
2018/10/31 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
详解js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2017/01/09 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
python 控制语句
2011/11/03 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python代码块及缓存机制原理详解
2019/12/13 Python
python如何输出反斜杠
2020/06/18 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
大学学习计划书范文
2014/05/02 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
redis 解决库存并发问题实现数量控制
2022/04/08 Redis