基本上这就是我想要完成的事情:
class Move(object):
def __init__(self, Attr):
if Attr:
self.attr = Attr
if hasattr(self, "attr"):
__call__ = self.hasTheAttr
else:
__call__ = self.hasNoAttr
def hasNoAttr(self):
#no args!
def hasTheAttr(func, arg1, arg2):
#do things with the args
__call__ = hasNoAttr
我知道这不起作用,它只是一直使用hasNoAttr。我的第一个想法是使用一个装饰器,但我并不熟悉它们,我无法弄清楚如何根据类属性是否存在来确定它。
实际问题部分:我如何根据条件确定性地使x函数或y函数成为函数。
答案 0 :(得分:3)
你无法用__call__
真正做到这一点 - 使用其他(非魔法)方法,你可以对它们进行修补,但使用__call__
和其他魔术方法你需要委托魔术方法本身的适当方法:
class Move(object):
def __init__(self, Attr):
if Attr:
self.attr = Attr
if hasattr(self, "attr"):
self._func = self.hasTheAttr
else:
self._func = self.hasNoAttr
def hasNoAttr(self):
#no args!
def hasTheAttr(func, arg1, arg2):
#do things with the args
def __call__(self,*args):
return self._func(*args)