我已经定义了这样一个类:
class MyClass:
def GetValue(self):
return 5
def PrintValue(self):
print self.GetValue()
对于某些MyClass实例,我需要重新定义GetValue(),例如:
def GetAGoodValue(self):
return 7
oneObject=MyClass()
oneObject.GetValue=GetAGoodValue
oneObject.PrintValue()
重新定义后,我得到了错误:
TypeError: not enough arguments; expected 1, got 0
如果在PrintValue方法中,我代之以编码:
print self.GetValue(self)
然后上面的代码可以工作,但仅适用于重新定义GetValue方法的那些MyClass实例。未重新定义GetValue方法的实例称错误为:
TypeError: too many arguments; expected 1, got 2
有什么建议吗?
答案 0 :(得分:1)
如果将方法分配给单个对象而不是更改整个类,则必须自己实现ususally-done绑定。
所以你有两个选择:
要么你做
oneObject.GetValue = lambda: GetAGoodValue(oneObject)
或者你“询问”函数对象如果被称为类属性它会做什么:
oneObject.GetValue = GetAGoodValue.__get__(oneObject, MyClass)
以便按预期工作。