动态地将可调用类添加为类的“方法”

动态地将可调用类添加为类的“方法”,第1张

动态地将可调用类添加为类的“方法

一种方法是将可调用对象作为未绑定方法附加到类。方法构造函数
与任意可调用对象(即具有

__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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5662034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存