栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

__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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号