我遇到两件事.从外部添加引用self的方法.即
class A(object):
def __init__(self, name):
self.name=name
def my_name_is(self):
print("my name is %s" %(self.name))
setattr(A, my_name_is.__name__, classmethod(my_name_is))
a = A('bob')
a.my_name_is()
因为它试图引用“ A”而不是“ a”的名称属性.
另一个是使用装饰器添加该函数,例如
@addMethod(A)
def say_hello_to(x):
print("hello %s" %x)
相当相当于
def addMethod(cls, f)
setattr(cls, f.__name__, classmethod(f))
解决方法:
问题1:您要寻找的是方法,而不是类方法.在这种情况下,一个简单的分配将起作用:
A.my_name_is = my_name_is
问题2:@后面的表达式应返回可调用对象,即addMethod(A)
应该是可调用的.可以这样完成:
def addMethod(cls):
def method_assigner(f):
setattr(cls, f.__name__, f)
return f
return method_assigner
然后工作:
@addMethod(A)
def say_hello_to(x):
print("hello %s" %x)
(在此示例中,当调用say_hello_to时,x将获得self的值.我不确定我是否确切了解x在您的cas中的作用,但希望这可以清楚说明如何实现您想要的功能.也许您想要def say_hello_to(self,x):…?).