一种方法是将可调用对象作为未绑定方法附加到类。方法构造函数 将
与任意可调用对象(即具有
__call__()方法的类的实例)一起工作,而不仅仅是函数。
from types import MethodTypeclass Foo(object): def __init__(self, name, val): self.name = name self.val = val self.__name__ = name + '_foo' self.name = name def __call__(self, instance): return self.name + str(self.val + instance.val)class Baz(object): def __init__(self, val): self.val = valBaz.biff = MethodType(Foo("biff", 42), None, Baz)b = Baz(13)print b.biff()>>> biff55
在Python
3中,没有未绑定实例(类仅附加有常规函数)之类的东西,因此您可以改为为
Foo类提供一个描述符,该描述符通过为它提供一个
__get__()方法来返回绑定实例方法。(实际上,该方法也可以在Python
2.x中使用,但是上面的方法会更好一些。)
from types import MethodTypeclass Foo(object): def __init__(self, name, val): self.name = name self.val = val self.__name__ = name + '_foo' self.name = name def __call__(self, instance): return self.name + str(self.val + instance.val) def __get__(self, instance, owner): return MethodType(self, instance) if instance else self # Python 2: MethodType(self, instance, owner)class Baz(object): def __init__(self, val): self.val = valBaz.biff = Foo("biff", 42)b = Baz(13)print b.biff()>>> biff55
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)