https://www.youtube.com/watch?v=Ss1M32pp5Ew&ab_channel=OlegMolchanov
Функция, которая принимает другую функцию в качестве аргумента и добавляет к ней некоторую функциональность
Цель декоратора: Чтобы изменить поведение функции без изменения ее исходного кода
Декораторы удобно использовать тогда, когда есть дублирование кода в функциях и этот код не относится к целевому коду конкретной функции (тот код который можно вынести за скобки).
Дублирующий код противоречит принципу единой ответственности, а также принципу DRY. И для того чтобы не повторять, чтобы вынести эту функциональность отдельно имеет смысл делать декоратор. Применяется в:
Простой декоратор
def text_decor(func):
def wrapper(*args,**kwargs):
print('Hello')
func(*args,**kwargs)
print('Good buy')
return wrapper