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 相关文章推荐
Python3中多线程编程的队列运作示例
Apr 16 Python
Python中的hypot()方法使用简介
May 18 Python
Python中title()方法的使用简介
May 20 Python
Python中http请求方法库汇总
Jan 06 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
python web框架 django wsgi原理解析
Aug 20 Python
利用Python的sympy包求解一元三次方程示例
Nov 22 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
pyCharm 实现关闭代码检查
Jun 09 Python
简述python四种分词工具,盘点哪个更好用?
Apr 13 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开发中常用的字符串操作函数
2011/02/08 PHP
浅谈php7的重大新特性
2015/10/23 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
AngularJS读取JSON及XML文件的方法示例
2017/05/25 Javascript
浅谈js闭包理解
2019/03/28 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python切片操作深入详解
2018/07/27 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
详解爬虫被封的问题
2019/04/23 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
结构和类有什么异同
2012/07/16 面试题
商务英语专业毕业生自荐信
2013/11/05 职场文书
车间组长岗位职责
2013/12/20 职场文书
五年级科学教学反思
2014/02/05 职场文书
党员活动日总结
2014/05/05 职场文书
学校志愿者活动总结
2014/06/27 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
钱学森电影观后感
2015/06/04 职场文书
银行培训心得体会范文
2016/01/09 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技