Курс 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. Установка и использование Python-dateutil
  2. Замена текста с re.sub()
  3. Функция rsplit() в Python
  4. Удаление элемента из списка в Python
  5. Преобразование списка в словарь через генератор
  6. Фильтрация элементов с помощью islice
  7. Извлечение аудио из видео
  8. Метод classmethod
  9. Проблемы с dict в Python
  10. Оптимизация создания строк
  11. Метод enumerate() в Python
  12. Проверка запуска скрипта или импорта модуля
  13. Работа с изменяемыми списками
  14. Работа с PosixPath() в Python
  15. Работа с модулем bisect
  16. Пустой оператор pass в Python
  17. Сортировка списка по индексам
  18. Метод __getitem__ в Python
  19. Метод __int__ в Python
  20. Работа с collections.Counter
  21. Искажение имен в Python
  22. Управление экспортом элементов
  23. Асинхронный код в Python
  24. CSV строка разделение в Python
  25. Форматирование строк в Python
  26. Измерение времени выполнения кода
  27. Измерение времени выполнения кода
  28. Обход дочерних элементов BeautifulSoup
  29. PrettyTable: создание таблицы
  30. Namedtuple в Python
  31. Срезы в Python
  32. Шаблоны Flask: условия и циклы
  33. Импорт и использование модулей в Python
  34. Вывод сложных структур данных с помощью pprint
  35. Установка и использование Logzero
  36. Оператор Walrus в Python 3.8
  37. Подсчет частотности элементов в Python
  38. Создание и использование ChainMap
  39. Список импортированных модулей в Python
  40. Применение функции к каждому элементу списка
  41. Операции со строками в Python
  42. Печать комбинаций в Python с Itertools
  43. Проверка типа данных
  44. Генерация UUID в Python
  45. Отправка HTTP-запросов в Python
  46. Методы сравнения множеств
  47. Избегание циклических зависимостей классов в Python
  48. Подробная информация о %pinfo

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