Курс 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"
- Чтение и запись TOML-конфигов
- Метод get для словаря
- Замеры производительности в Python
- Возврат нескольких значений из функции
- Оптимизация интернирования строк
- Создание комплексных чисел
- Работа с кортежами в Python
- Хранение данных
- Генераторы в Python
- Работа с индексами списков
- Работа с CSV файлами
- Измерение времени выполнения кода
- Генерация строк с .join()
- Объединение множеств в Python
- Операции с числами в Python
- Удаление ссылок в Python
- Навыки Python: строки, типы данных
- Проектирование Singleton с метаклассом
- Транспонирование матрицы в Python
- Синхронизация доступа к ресурсам
- Форматирование строк с % в Python
- Метод ifloordiv для пользовательских классов
- TON Smart Challenge #2: участие и подготовка
- Метод rsub для пользовательских чисел
- Метод join() для объединения элементов строки
- Введение в Python
- Удаление ресурса в Python
- Работа с timedelta
- Оформление кода по PEP 8
- Метод join() для объединения элементов
- Применение функции map() с лямбда-функциями
- Работа с OpenCV
- Очистка данных в Python
- Фильтрация списка чисел
- Измерение времени выполнения в Python
- Пропуск строк в файле с itertools
- Экранирование символов в Python
- Декоратор защиты анонимных пользователей
- Функция enumerate в Python
- Резервирование символов в Python
- Работа с deque в Python
- Python Метод sleep() времени
- Combobox в Tkinter
- JMESPath в Python
- Изменение элемента списка
- Сортировка HTML-элементов
- Измерение времени выполнения кода















