Допустим, в моем классе есть много методов, и я хочу применить свой декоратор к каждому из них, позже, когда я добавлю новые методы, я хочу применить тот же декоратор, но я не хочу писать @mydecorator над объявлением метода время?
Если я __call__
в __call__
, это правильный путь?
ВАЖНО: приведенный ниже пример, похоже, решает проблему, отличную от первоначального вопроса.
РЕДАКТИРОВАТЬ: Я хотел бы показать этот путь, который является аналогичным решением моей проблемы для любого, кто не найдет этот вопрос позже, используя миксин, как упоминалось в комментариях.
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)