python高级进阶_7_Python动态语言之types.MethodType执行过程02

本文深入探讨了Python中动态绑定方法的过程与原理,解释了为何直接赋值方法无法正确执行,而使用types.MethodType进行绑定则可以成功。通过具体代码示例,阐述了规范性书写的重要性,以及如何确保动态添加的方法与预定义方法保持一致。

看下边的代码

class Person():
    def __init__(self,name):
        self.name=name
def run(self):
    print("runing%s"%self.name)
import types
p1.run=types.MethodType(run,p1)
p1.run()
d;k'k'k'wo
XXXX=types.MethodType(run,p1)
XXXX()

疑问 为什么 p1.run=run 不能执行成功, 而 p1.run=types.MethodType(run,p1) 可以呢

  1. 之所以不能执行成功 是因为缺少 参数self
  2. 之所以能执行成功是因为 他传递一个参数, 而这个参数就是 p2实例
  3. types.MethodType(run,p1) 它绑定好参数之后 它返回是一个方法的引用 ,就是 run方法引用传递给了p1.run,咱们验证下
    XXXX=types.MethodType(run,p1)
    XXXX()

这个也可以执行成功的, 为什么咱们要 这样写呢?

这就是规范的问题, 动态添加的方法 一定 要和types.MethodType(run,p1) 里面的方法 一样。 这样辨识度很高,

容易和 这块代码联系在一起。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值