Как украсить все функции класса, не вводя его снова и снова для каждого метода? [Дубликат]
На этот вопрос уже есть ответ:
Присоединение декоратора ко всем функциям в классе 4 ответаПусть в моем классе много методов, и я хочу применить свой декоратор к каждому из них, позже, когда я добавлю новые методы, я хочу применить тот же декоратор, но я не хочу писать @mydecorator над объявлением метода все время
Если я загляну в__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)