Курс Python → Декораторы в Python

Декораторы в Python представляют собой специальный синтаксис, который позволяет нам изменять поведение функций или методов без изменения их исходного кода. Для написания собственного декоратора в Python, нам нужно определить функцию, которая будет являться декоратором, и применить ее к целевой функции с помощью символа @.


def my_decorator(func):
    def wrapper():
        print("Before function is called")
        func()
        print("After function is called")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

В данном примере мы создали декоратор my_decorator, который выводит сообщения до и после вызова целевой функции say_hello. При использовании декоратора @my_decorator перед определением функции say_hello, мы расширили функциональность функции say_hello без изменения ее кода.

Декораторы могут принимать аргументы, что позволяет нам настраивать их поведение. Для передачи аргументов в декоратор, мы можем определить еще одну внутреннюю функцию, которая будет принимать эти аргументы и передавать их внутреннему декоратору.


def my_decorator_with_args(arg1, arg2):
    def decorator(func):
        def wrapper():
            print(f"Arguments passed to decorator: {arg1}, {arg2}")
            func()
        return wrapper
    return decorator

@my_decorator_with_args("arg1_value", "arg2_value")
def say_hello():
    print("Hello!")

say_hello()

В этом примере мы создали декоратор my_decorator_with_args, который принимает два аргумента и передает их внутреннему декоратору, который затем выводит их значения перед вызовом целевой функции say_hello. Таким образом, мы можем настраивать поведение декораторов в зависимости от переданных аргументов.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Итерации в Python
  2. Оценка выражений генератора в Python
  3. Конкатенация строковых литералов
  4. Удаление файлов и папок в Python
  5. Импорт объектов из модулей
  6. Логирование с Loguru
  7. Шаблоны Flask: условия и циклы
  8. Проверка индексов коллекции
  9. Открытие и запись файлов
  10. Объединение списков с помощью zip
  11. split() без разделителя
  12. Функции map() и reduce() в Python
  13. Получение частей дроби
  14. Установка и использование emoji
  15. Тестирование модели в PyTorch
  16. Создание и обучение модели с Keras
  17. Многострочные строки в Python
  18. Управление асинхронными задачами с помощью Semaphore
  19. Декораторы в Python
  20. Упрощение работы с JSON-данными в Python
  21. Python enumerate() использование
  22. Namedtuple в Python
  23. Генераторы в Python
  24. Метод append() для списка
  25. Функции all() и any() в Python
  26. Создание виртуальной среды
  27. Асинхронное программирование с asyncio
  28. Метод setdefault() в Python
  29. Функции min(), max(), sum()
  30. Метод __ixor__ для побитового исключающего ИЛИ
  31. Управление контекстом с помощью декоратора contextmanager
  32. Копирование словарей и списков в Python
  33. Метод сравнения объектов в Python
  34. Метод join() для объединения элементов строки
  35. Особенности ключей словаря в Python
  36. Работа с асинхронными задачами в Python
  37. Возврат нескольких значений
  38. Округление банкира в Python
  39. Подписка на @SelectelNews
  40. Контроль точности вывода чисел
  41. Работа с IP-адресами в Python
  42. Lambda Functions in Python
  43. Избегайте использования goto
  44. Оператор zip в Python
  45. Форматирование строк в Python
  46. Работа с JSON данными в Python

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