Курс 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. Оператор in для Python
  2. TypedDict для kwargs в Python 3.12
  3. Печать месячного календаря
  4. Конвертация текстовых чисел с помощью Numerizer
  5. Хэш-функции и метод цепочек
  6. Получение частей дроби
  7. Очистка данных в Python
  8. Проблемы с dict в Python
  9. Создание GUI на Tkinter
  10. Нахождение максимального значения и его индекса в списке
  11. Оператор match в Python
  12. Удаление символов новой строки в Python.
  13. Настройка Cron
  14. Подписка на SelectelNews в Twitter
  15. Оператор (*) в Python
  16. Управление виртуальными средами в Python
  17. Counter() — подсчет элементов
  18. Работа с множествами в Python
  19. Python enumerate() для работы с индексами
  20. Обработка исключений в Python
  21. Объединение списков с использованием itertools.chain
  22. Concrete Paths в Python
  23. Использование super() в Python
  24. Отладчик pdb: начало работы
  25. Декораторы с аргументами
  26. Передача словаря через **kwargs
  27. Объединение списков в Python.
  28. Типы возвращаемых значений в Python
  29. Модуль xkcd: загрузка комиксов
  30. Улучшение читаемости кода в Python
  31. Атрибуты класса и экземпляра
  32. Создание и операции с дробями
  33. Инвертирование словаря
  34. Установка и использование Telegram API в Python
  35. Сортировка в Python
  36. Отображение HTML кода в Python
  37. Python: возвращение нескольких значений
  38. Обмен значений переменных в Python
  39. Создание директории в Python
  40. Многострочные комментарии в Python
  41. Python и Юникод: работа с цифрами
  42. Генераторы в Python
  43. Гибкие функции Python
  44. Создание OrderedDict
  45. Метод append() для списка
  46. Преобразование списка в словарь через генератор

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