При написании декораторов в Python, иногда требуется передавать параметры в декоратор во время исполнения программы, а не в момент определения декоратора. Передача параметров в декоратор во время исполнения в Python достигается путем использования вложенной функции, которая будет принимать параметры и возвращать декоратор.
Рассмотрим пример:
def make_decorator(param): def decorator(func): def wrapper(*args, **kwargs): print(f"Параметр декоратора: {param}") result = func(*args, **kwargs) return result return wrapper return decorator @make_decorator("Привет") def say_hello(name): print(f"Привет, {name}!") say_hello("Миша")
В данном примере мы определили функцию make_decorator
, которая принимает параметр param
. Затем внутри make_decorator
определяется функция decorator
, которая является декоратором. Внутри декоратора decorator
определяется функция wrapper
, которая выполняет код до и после вызова оборачиваемой функции func
.
Когда мы применяем декоратор make_decorator
к функции say_hello
, мы передаем строку "Привет" в качестве параметра. Эта строка передается внутрь декоратора во время исполнения.
При вызове функции say_hello("Миша")
будет выполнен декоратор wrapper
, который в свою очередь печатает переданный параметр декоратора и вызывает оборачиваемую функцию func
.
В результате выполнения программы будет выведено:
Параметр декоратора: Привет Привет, Миша!
Таким образом, передача параметра в декоратор во время исполнения программы в Python достигается путем использования вложенной функции и возвращения декоратора с помощью этой функции.