【发布时间】:2015-05-18 12:59:36
【问题描述】:
经过大量搜索,我发现有几种方法可以将绑定方法或未绑定的类方法添加到现有实例对象中
这些方法包括以下代码所采用的方法。
import types
class A(object):
pass
def instance_func(self):
print 'hi'
def class_func(self):
print 'hi'
a = A()
# add bound methods to an instance using type.MethodType
a.instance_func = types.MethodType(instance_func, a) # using attribute
a.__dict__['instance_func'] = types.MethodType(instance_func, a) # using __dict__
# add bound methods to an class
A.instance_func = instance_func
A.__dict__['instance_func'] = instance_func
# add class methods to an class
A.class_func = classmethod(class_func)
A.__dict__['class_func'] = classmethod(class_func)
让我恼火的是,输入函数的名称,instance_func 或 class_func 两次。
是否有任何简单的方法可以将现有函数添加到类或实例中而无需再次输入函数的名称?
例如,
A.add_function_as_bound_method(f) 将是向实例或类添加现有函数的优雅方式,因为该函数已经具有 __name__ 属性。
【问题讨论】:
标签: python