Курс Python → Декораторы с @wraps
Декораторы — это мощный инструмент в Python, который позволяет добавлять функциональность к существующим функциям без их изменения. Они позволяют разделять код, улучшать его читаемость и повторное использование. Одним из способов создания декораторов является использование декоратора @wraps из модуля functools.
Пример использования декоратора @wraps представлен ниже. Предположим, у нас есть функция my_function, которую мы хотим декорировать с помощью my_decorator. Для этого мы определяем функцию my_decorator, внутри которой создаем внутреннюю функцию wrapper. С помощью декоратора @wraps мы копируем метаданные из декорируемой функции func, включая имя функции, документацию и другие атрибуты.
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
# Дополнительный код до вызова функции
result = func(*args, **kwargs)
# Дополнительный код после вызова функции
return result
return wrapper
@my_decorator
def my_function():
# Реализация функции
pass
my_function()
В данном примере, после декорирования функции my_function с помощью @my_decorator, мы можем вызвать ее как обычную функцию. При этом все атрибуты исходной функции будут сохранены благодаря декоратору @wraps. Это позволяет избежать потери метаданных и обеспечивает корректное отображение имени функции, документации и других атрибутов.
Использование декораторов с декоратором @wraps упрощает работу с функциями и повышает их надежность. Благодаря этому подходу код становится более читаемым, модульным и легко поддерживаемым. Декораторы позволяют добавлять общую функциональность к различным функциям, не затрагивая их исходный код.
Другие уроки курса "Python"
- Функция zip() в Python
- Цикл for в Python
- Создание графиков в терминале
- Создание спинбокса в tkinter
- Логирование в Python
- Итерация по копии коллекции
- Функция product() в Python
- Функция reduce() в Python
- Поиск шаблона в строке
- Работа с аргументами командной строки в Python
- Создание виртуальной среды
- Область видимости переменных
- Умножение строк и списков
- Избегайте ошибку FileNotFoundError
- Профилирование с cProfile
- Создание даты из строки ISO
- Расширение информации об ошибке в Python
- Лямбда-функции в Python
- Передача аргументов через **arguments
- Уникальность ключей в словаре
- Combobox в Tkinter
- Работа с модулем bisect
- Автоматизация с Python
- Оценка выражений генератора в Python
- Создание файла с проверкой ошибки
- Модуль Antigravity в Python 3
- Копирование словарей и списков в Python
- Комментарии в Python
- Инверсия списка/строки в Python
- Библиотека sh: удобные команды терминала
- Объединение словарей в Python 3.5+
- Декодирование байтов в строку
- Очистка данных в Python
- Метод __getitem__ в Python
- Метод index() в Python
- Сортировка с помощью параметра key
- Переопределение метода
- Преобразование в float
- Генераторы в Python
- Преобразование данных в Python
- Частичное совпадение пользовательского ввода в Python 3.10
- Метод rsub для пользовательских чисел
- Big O оптимизация
- Работа с *args и **kwargs в Python
- Удаление элементов из списка в Python
- Отладка в Python















