Python Development
Александр Вотин, Backend developer · 26.11
Декораторы с параметрами. Мощный инструмент Python
Обычный декоратор — это функция, которая добавляет дополнительные возможности к твоей функции. Например, выводит что-то перед или после вызова функции, проверяет параметры или записывает данные в лог. Но представь, что ты хочешь настроить поведение декоратора. Например:
- Перед вызовом функции выводить разные сообщения.
- Логировать вызовы только в определённых ситуациях.
- Контролировать, сколько раз можно вызвать функцию.
Вот тут и приходят на помощь декораторы с параметрами. Они позволяют добавить гибкость и контроль.
Декоратор с параметрами — это как «трёхэтажный дом». Первый этаж (внешняя функция) — принимает параметры, которые нужны для настройки. Второй этаж (средняя функция) — принимает твою функцию. Третий этаж (внутренняя функция) — выполняет логику декоратора и вызывает оригинальную функцию.
На изображении декоратор, который перед вызовом функции будет выводить кастомное сообщение. Ты сам задаёшь, что именно он скажет.
- Внешняя функция decorator_with_message(message). Ты передаёшь сообщение ("Привет! Эта функция сейчас запустится."). Функция возвращает сам декоратор (actual_decorator).
- Средняя функция actual_decorator(func). Получает твою функцию (say_hello). Возвращает обёртку (wrapper).
- Внутренняя функция wrapper(args, *kwargs). Выполняет дополнительную логику (вывод сообщения). Затем вызывает твою функцию и возвращает её результат.
Используй декораторы с параметрами если: - Хочешь, чтобы функция писала в лог файл с заданным уровнем важности (например, INFO или ERROR). - Нужно проверить входные данные перед выполнением функции. - Хочешь настроить, что именно делает декоратор, в зависимости от ситуации.
Ты можешь управлять поведением декоратора, просто меняя его параметры. Код остаётся компактным и легко читаемым. Один декоратор с параметрами может использоваться для множества функций.
Konstantin Boitsov
· 26.11
Отлично
ответить
еще контент автора
еще контент автора
Python Development
Александр Вотин, Backend developer · 26.11
войдите, чтобы увидеть
и подписаться на интересных профи