如何使用getattr調用方法? 我想創建一個元類,它可以調用其他一些以「oposite_」開頭的類的非現有方法。該方法應該有相同數量的參數,但要返回相反的結果。在Python中使用getattr調用方法
def oposite(func):
return lambda s, *args, **kw: not oposite(s, *args, **kw)
class Negate(type):
def __getattr__(self, name):
if name.startswith('oposite_'):
return oposite(self.__getattr__(name[8:]))
def __init__(self,*args,**kwargs):
self.__getattr__ = Negate.__getattr__
class P(metaclass=Negate):
def yep(self):
return True
def maybe(self, sth):
return sth
但問題是,
self.__getattr__(sth)
返回NoneType對象。
>>> p = P()
>>> p.oposite_yep() #should be False
Traceback (most recent call last):
File "<pyshell#115>", line 1, in <module>
p.oposite_yep()
TypeError: <lambda>() takes at least 1 positional argument (0 given)
>>> p.oposite_maybe(False) #should be true
如何處理這個問題?
爲了記錄,「oposite」拼寫爲兩個p。但是,正如我的一位同事所說的,「程序員不需要拼寫正確,他們需要拼寫一致。」 – Seth 2010-05-27 00:05:44