最佳答案
假设我的类有很多方法,我想在每一个方法上都应用修饰符,稍后当我添加新方法时,我希望应用相同的修饰符,但是我不想一直在方法声明上面写@mydecator?
如果我调查 __call__
是正确的方法吗?
重要提示: 下面的例子似乎解决了一个与原问题不同的问题。
编辑: Id like to show this way,这是一个类似于我的问题的解决方案,任何人以后发现这个问题时都可以使用,就像评论中提到的混合。
class WrapinMixin(object):
def __call__(self, hey, you, *args):
print 'entering', hey, you, repr(args)
try:
ret = getattr(self, hey)(you, *args)
return ret
except:
ret = str(e)
raise
finally:
print 'leaving', hey, repr(ret)
然后你可以在另一个
class Wrapmymethodsaround(WrapinMixin):
def __call__:
return super(Wrapmymethodsaround, self).__call__(hey, you, *args)