Python中如何安全地将一个类的方法绑定到另一个类?
嘿,我最近摸索Python的时候发现了两个关于类方法绑定的有意思的点,跟大家唠唠:
1. 普通函数可以直接附加到类,变成它的方法
我本来就知道可以用setattr()把普通函数绑定到类上,让它成为类的方法,比如这样:
>>> def is_not_bound(inst, name): ... print("Hello %s" % name) ... >>> class NoMethods: ... pass ... >>> setattr(NoMethods, 'bound', is_not_bound) >>> NoMethods().bound("oz") # 输出: Hello oz
调用的时候,实例会自动作为第一个参数inst传进去,完全像类里原生定义的方法一样工作。
2. 把一个类的绑定方法绑定到另一个类也能行!
这一点是我完全没想到的——原来一个类的绑定方法,也能通过setattr()绑定到另一个毫不相关的类上,照样正常运行:
>>> class Foo: ... def foo(self, name): ... print("Hello %s" % name) ... >>> class Bar: ... pass ... >>> setattr(Bar, 'bar_method', Foo().foo) >>> Bar().bar_method("oz") # 输出: Hello oz
哪怕Bar类本身根本没定义这个方法,把Foo实例的绑定方法挂上去之后,Bar的实例调用它时居然也能正常输出,是不是挺出乎意料的?
内容的提问来源于stack exchange,提问作者oz123
相关产品推荐
相关产品推荐

