看下边的代码
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) 可以呢
- 之所以不能执行成功 是因为缺少 参数self
- 之所以能执行成功是因为 他传递一个参数, 而这个参数就是 p2实例
- types.MethodType(run,p1) 它绑定好参数之后 它返回是一个方法的引用 ,就是 run方法引用传递给了p1.run,咱们验证下
XXXX=types.MethodType(run,p1)
XXXX()
这个也可以执行成功的, 为什么咱们要 这样写呢?
这就是规范的问题, 动态添加的方法 一定 要和types.MethodType(run,p1) 里面的方法 一样。 这样辨识度很高,
容易和 这块代码联系在一起。