from functools import wraps def add_msg(start_msg, end_msg): def some_decorator(func): @wraps(func) def result(*args, **kwargs): print(start_msg, func.__name__) func(*args, **kwargs) print(end_msg, func.__name__) return result return some_decorator @add_msg("старт функции", "завершение функции") def test(a, b): print(a * b) test(2, 5)
Правда не совсем понял, почему меняется атрибут __name__ декорируемой функции.