Одна из отличительных особенностей Python заключается в том, что методы и функции на самом деле одинаковы. Единственное отличие состоит в том, что методы ожидают, что их первый аргумент является ссылкой на текущий объект self
.
Это означает, что можно построить декоратор для методов класса на основе шаблона декоратора общего назначения!
import functools def decorate_method(method): def wrapper(*args, **kwargs): # уменьшает возраст еще больше lie = args[1] - 3 args = [args[0], lie] return method(*args, **kwargs) return wrapper class Lucy(): def __init__(self): self.age = 32 @decorate_method def sayYourAge(self, lie): print(f'Мне {self.age + lie} лет, что ты об этом думаешь?') l = Lucy() l.sayYourAge(-3) # Мне 26 лет, что ты об этом думаешь?