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中的yield使用方法
Feb 11 Python
在服务器端实现无间断部署Python应用的教程
Apr 16 Python
Python使用django获取用户IP地址的方法
May 11 Python
python list排序的两种方法及实例讲解
Mar 20 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
Tensorflow实现卷积神经网络的详细代码
May 24 Python
python的中异常处理机制
Aug 30 Python
python 魔法函数实例及解析
Sep 25 Python
对Pytorch中Tensor的各种池化操作解析
Jan 03 Python
opencv+python实现均值滤波
Feb 19 Python
基于python实现FTP文件上传与下载操作(ftp&sftp协议)
Apr 01 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 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的几个常用数字判断函数代码
2012/04/24 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
php 多个变量指向同一个引用($b = &$a)用法分析
2019/11/13 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
vue 页面加载进度条组件实例
2018/02/05 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
实例讲解JS中pop使用方法
2019/01/27 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
利用Python爬取可用的代理IP
2016/08/18 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
旧时光糖果:Old Time Candy
2018/02/05 全球购物
仓管员岗位职责范文
2013/11/08 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技