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代码实例
Feb 04 Python
用Python代码来解图片迷宫的方法整理
Apr 02 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
python实现上传下载文件功能
Nov 19 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
学习Python爬虫的几点建议
Aug 05 Python
详解python中的lambda与sorted函数
Sep 04 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
pytorch 如何使用batch训练lstm网络
May 28 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
神族 PROTOSS 概述
2020/03/14 星际争霸
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
PHP fclose函数用法总结
2019/02/15 PHP
分页栏的web标准实现
2011/11/01 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
js实现右键菜单功能
2016/11/28 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
Python使用Socket(Https)Post登录百度的实现代码
2012/05/18 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
2017/10/20 Python
Python3几个常见问题的处理方法
2019/02/26 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python中的类与类型示例详解
2019/07/10 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
运动会跳远加油稿
2014/02/20 职场文书
高中班主任评语大全
2014/04/25 职场文书
汽车专业求职信
2014/06/05 职场文书
见习报告格式范文
2014/11/08 职场文书
道歉信范文
2015/05/12 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
《鲸》教学反思
2016/02/23 职场文书
Golang并发工具Singleflight
2022/05/06 Golang