可以说我的班级有很多方法,我想在每个方法上应用我的装饰器,以后在我添加新方法时,我想应用相同的装饰器,但是我不想在所有方法声明上方写@mydecorator时间?
如果我调查__call__这是正确的方法?
重要提示:以下示例似乎在解决与原始问题不同的问题。
编辑:我想显示这种方式,这是我的问题的类似解决方案,任何人以后都可以使用注释中提到的mixin找到这个问题。
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)
相关分类