Курс 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. Мониторинг памяти с Pympler
  2. Управление асинхронными задачами на Python.
  3. Python Метод sleep() времени
  4. Удаление элементов из списка в Python
  5. Работа с SQLite в Python
  6. Лямбда-функции в Python
  7. Ускорение обработки данных с %autoawait
  8. Установка пакета в Python
  9. Участие в LP стейкинге Waves
  10. Декодирование байтов в строку
  11. Печать списка с помощью метода join
  12. Работа со временем в Python
  13. Подсчет часто встречающихся элементов
  14. Улучшенные подсказки для импорта в Python 3.12
  15. Работа с itertools
  16. Python UserString — создание подклассов строк
  17. Сравнение строк в Python
  18. Удаление URL-адресов в Python
  19. Чтение и запись TOML-конфигов
  20. Переопределение метода sub
  21. Создание списка дат
  22. Работа с библиотекой xkcd
  23. Работа с argparse
  24. Использование type hints
  25. Встраивание HTML в Jupyter Notebook
  26. Модуль xkcd: загрузка комиксов
  27. Управление IP-адресами через прокси
  28. Поиск индексов в списке
  29. Проверка элемента в множестве.
  30. Использование super() в Python
  31. Проверка подстроки в строке с помощью in
  32. Оформление кода на Python
  33. Функция reversed() в Python
  34. Хранение переменных в Python.
  35. Проверка условий: all и any
  36. Создание виртуальной среды
  37. Очистка данных с Pandas
  38. Лямбда-функции для min/max
  39. Создание циклической ссылки
  40. Проверка индексов коллекции
  41. Магические методы в Python
  42. Роль object и type в Python
  43. Вывод с переменной через запятую
  44. Создание объекта timedelta
  45. Поиск подстроки в строке
  46. Создание новых списков через list comprehensions
  47. Defaultdict в Python
  48. Форматирование строк в Python

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