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 相关文章推荐
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
分享Python字符串关键点
Dec 13 Python
python smtplib发送带附件邮件小程序
May 22 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
django重新生成数据库中的某张表方法
Aug 28 Python
python保留小数位的三种实现方法
Jan 07 Python
Python任务调度模块APScheduler使用
Apr 15 Python
在pytorch中动态调整优化器的学习率方式
Jun 24 Python
总结python 三种常见的内存泄漏场景
Nov 20 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
大学生年度自我鉴定
2013/10/31 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
白鹤梁导游词
2015/02/06 职场文书
户外拓展训练感想
2015/08/07 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python
HTML常用标签超详细整理
2022/03/19 HTML / CSS
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技