如何使用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