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人人网登录应用实例
Sep 26 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
Python实现二叉搜索树
Feb 03 Python
Python基于select实现的socket服务器
Apr 13 Python
浅析python中的分片与截断序列
Aug 09 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
pygame实现简易飞机大战
Sep 11 Python
anaconda如何查看并管理python环境
Jul 05 Python
python路径的写法及目录的获取方式
Dec 26 Python
Python for循环与getitem的关系详解
Jan 02 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
基于pytorch中的Sequential用法说明
Jun 24 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下实现农历日历的代码
2007/03/07 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
phalcon框架使用指南
2016/02/23 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
javascript判断回文数详解及实现代码
2017/02/03 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
ES6之Proxy的get方法详解
2019/10/11 Javascript
vue打开其他项目页面并传入数据详解
2020/11/25 Vue.js
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
Python正则表达式指南 推荐
2018/10/09 Python
python requests post多层字典的方法
2018/12/27 Python
Python3.5基础之NumPy模块的使用图文与实例详解
2019/04/24 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
移动通信行业实习自我鉴定
2013/09/28 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS