Курс 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. Эффективная конкатенация строк с использованием join()
  2. Разрешение имен в Python
  3. Атрибуты класса и экземпляра в Python
  4. Метод rmatmul для пользовательских матриц
  5. Вывод баннеров
  6. Вывод переменной и строки в Python
  7. Обработка исключений в Python 3
  8. Работа с кортежами
  9. Открытие и редактирование скриптов Python
  10. Циклы for в Python
  11. Получение частей дроби
  12. Преобразование символов с помощью map
  13. Преобразование данных в Python
  14. Кортеж в Python: создание и использование
  15. Обмен данными с asyncio.Queue
  16. Создание копии списка в Python
  17. Генераторы списков в Python
  18. Методы работы со строками в Python
  19. Получение имени функции с помощью inspect
  20. Magic Commands — улучшение работы с Python
  21. Фильтрация списка чисел
  22. Идентификатор объекта в Python
  23. Работа с итераторами в Python
  24. Генераторы в Python
  25. Исправление ошибки NameError
  26. Получение комбинаций в Python
  27. Python itertools combinations() — группировка элементов
  28. Делегирование в Python
  29. Умножение строк и списков
  30. Перемещение и удаление файлов в Python
  31. Установка виртуального окружения Python
  32. Удаление ресурса в Python
  33. Преобразование данных в Python
  34. Импорт объектов из модулей
  35. Чтение бинарного файла в Python.
  36. Форматирование строк с помощью f-строк
  37. Генератор данных в Keras
  38. Потоковый ввод в Python
  39. Метод clear для коллекций
  40. Импорт модулей в Python 3.12
  41. Метод remove() для удаления элемента из списка
  42. Подсчет элементов в Python
  43. Лямбда-функции в Python
  44. Протокол управления контекстом
  45. Сравнение строк в Python
  46. Оператор @ для умножения матриц
  47. Получение текущей даты и времени
  48. Работа с переменными в Python

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