Курс 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"

  1. Чтение и запись TOML-конфигов
  2. Метод get для словаря
  3. Замеры производительности в Python
  4. Возврат нескольких значений из функции
  5. Оптимизация интернирования строк
  6. Создание комплексных чисел
  7. Работа с кортежами в Python
  8. Хранение данных
  9. Генераторы в Python
  10. Работа с индексами списков
  11. Работа с CSV файлами
  12. Измерение времени выполнения кода
  13. Генерация строк с .join()
  14. Объединение множеств в Python
  15. Операции с числами в Python
  16. Удаление ссылок в Python
  17. Навыки Python: строки, типы данных
  18. Проектирование Singleton с метаклассом
  19. Транспонирование матрицы в Python
  20. Синхронизация доступа к ресурсам
  21. Форматирование строк с % в Python
  22. Метод ifloordiv для пользовательских классов
  23. TON Smart Challenge #2: участие и подготовка
  24. Метод rsub для пользовательских чисел
  25. Метод join() для объединения элементов строки
  26. Введение в Python
  27. Удаление ресурса в Python
  28. Работа с timedelta
  29. Оформление кода по PEP 8
  30. Метод join() для объединения элементов
  31. Применение функции map() с лямбда-функциями
  32. Работа с OpenCV
  33. Очистка данных в Python
  34. Фильтрация списка чисел
  35. Измерение времени выполнения в Python
  36. Пропуск строк в файле с itertools
  37. Экранирование символов в Python
  38. Декоратор защиты анонимных пользователей
  39. Функция enumerate в Python
  40. Резервирование символов в Python
  41. Работа с deque в Python
  42. Python Метод sleep() времени
  43. Combobox в Tkinter
  44. JMESPath в Python
  45. Изменение элемента списка
  46. Сортировка HTML-элементов
  47. Измерение времени выполнения кода

Marketello читают маркетологи из крутых компаний