python利用MethodType绑定方法到类示例代码

 更新时间:2017年08月27日 08:41:28   作者:自傷無色丶  
这篇文章主要给大家介绍了关于python利用MethodType绑定方法到类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。

前言

本文主要给大家介绍了关于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中静态变量的意思

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • pytorch如何保存训练模型参数并实现继续训练

    pytorch如何保存训练模型参数并实现继续训练

    这篇文章主要介绍了pytorch如何保存训练模型参数并实现继续训练问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 详解Python matplotlib中的色彩使用详解

    详解Python matplotlib中的色彩使用详解

    matplotlib中提供了一些常见颜色的字符串,并封装成了几个颜色字典,这篇文章主要来和大家讲解一下matplotlib中的色彩使用,需要的可以参考一下
    2023-07-07
  • django中使用事务及接入支付宝支付功能

    django中使用事务及接入支付宝支付功能

    这篇文章主要介绍了django中使用事务以及接入支付宝支付功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • 详解如何用Python登录豆瓣并爬取影评

    详解如何用Python登录豆瓣并爬取影评

    这篇文章主要介绍了如何用Python登录豆瓣并爬取影评,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow

    Tensorflow安装问题: Could not find a version that satisfies the

    这篇文章主要介绍了Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • pytorch lstm gru rnn 得到每个state输出的操作

    pytorch lstm gru rnn 得到每个state输出的操作

    这篇文章主要介绍了pytorch lstm gru rnn 得到每个state输出的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python自动扫描出微信不是好友名单的方法

    Python自动扫描出微信不是好友名单的方法

    很多人想要清楚已经被删除的好友名单。面对庞大的好友数量想要清除谈何容易,本文主要介绍了Python自动扫描出微信不是好友名单的方法,感兴趣的可以了解一下
    2021-05-05
  • python字符串的多行输出的实例详解

    python字符串的多行输出的实例详解

    在本篇文章里小编给大家整理的是一篇关于python字符串的多行输出的实例详解内容,有兴趣的朋友们跟着学习下。
    2021-06-06
  • python中的opencv 图像分割与提取

    python中的opencv 图像分割与提取

    这篇文章主要介绍了python中的opencv 图像分割与提取,图像中将前景对象作为目标图像分割或者提取出来。对背景本身并无兴趣分水岭算法及GrabCut算法对图像进行分割及提取。具体实现过程需要的朋友可以参考下面文章详细介绍
    2022-06-06
  • FastApi如何快速构建一个web项目的实现

    FastApi如何快速构建一个web项目的实现

    本文主要介绍了FastApi如何快速构建一个web项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03

最新评论