Курс 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. Работа с NumPy массивами
  2. Игра «Угадывание чисел»
  3. Создание и операции с дробями
  4. Генераторы словарей и множеств
  5. Форматирование вывода списков
  6. Метод pop() списка
  7. Оператор is в Python
  8. Оператор обр. импликации
  9. Поиск файлов по шаблону
  10. Область видимости переменных
  11. Роль object и type в Python
  12. Проверка наличия элемента в списке
  13. Замыкания в Python
  14. Работа с модулем cmath
  15. Оператор space-invader
  16. Возврат нескольких значений
  17. Python Calendar Usage
  18. Модуль subprocess: запуск внешних команд
  19. Замер времени выполнения кода
  20. Удаление и повторная вставка ключа в OrderedDict
  21. Работа с классами данных
  22. Синхронизация потоков с time.sleep()
  23. Функции-генераторы в Python
  24. Поиск наиболее частого элемента списке
  25. Освобождение памяти в Python
  26. Выборка чисел
  27. Создание namedtuple списком полей
  28. Расчет времени выполнения
  29. Декораторы классов
  30. Получение обратного списка чисел
  31. Установка и использование Logzero
  32. Методы __repr__ и __str__ в Python
  33. Применение функции map() в Python
  34. Структура данных deque в Python
  35. Разделение списка на гнппы
  36. Любовь к Python
  37. Работа с CSV в Python
  38. Работа с контекст-менеджером «with»
  39. Работа с временем в Python
  40. Генератор надежных паролей
  41. Сравнение строк в Python
  42. Определение основы слова с showballstemmer
  43. Функция format() в Python
  44. Переменная Шредингера
  45. Оптимизация строк в Python

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