Decorator
Определение#
Декоратор — это языковая конструкция (механизм), которая позволяет добавлять новый функционал к нашей функции, не видоизменяя саму функцию.
Как это работает#
Декоратор создаёт Wrapper (обёртку) вокруг исходной функции:
- Исходная функция передаётся в декоратор как аргумент.
- Декоратор возвращает новую функцию-обёртку (wrapper).
- Обёртка может выполнить код до и после вызова оригинальной функции.
- При этом сама декорируемая функция остаётся нетронутой — меняется только способ её вызова
Эквивалентная запись декоратора @empty_deco без синтаксического сахара:
my_func = empty_deco(my_func)
Пример#
from typing import Callable
import time
def empty_deco(func): # Identity decorator
def wrapper(): # Создание обёртки
start = time.time()
res = func()
end = time.time()
print(f"Исполнение заняло {end-start}")
return wrapper
# Decorator
@empty_deco
def my_func():
time.sleep(0.6)
return 124
print(my_func())