Курс 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. Методы shutil для работы с файлами
  3. Операторы += в Python
  4. Распаковка с оператором *
  5. Итераторы с потерямиZIP
  6. Эффективная конкатенация строк в Python
  7. Удаление элементов из списка в Python
  8. Упрощение условных выражений с тернарным оператором
  9. Класс Counter() для подсчета элементов
  10. Метод __ilshift__ для битового сдвига влево
  11. Генератор надежных паролей
  12. Комментарии в Python
  13. Обработка исключений в Python
  14. Работа с NumPy массивами
  15. Библиотека schedule: планировщик задач
  16. Определение относительного пути
  17. Форматирование вывода с F-строками
  18. Введение в Python
  19. Разделение строки на подстроки в Python
  20. Использование функции enumerate()
  21. Функция enumerate() в Python
  22. Перегрузка операторов в Python
  23. Pillow: работа с изображениями
  24. Класс UserDict: дополнительная функциональность
  25. Список переменных с %who
  26. Сериализация объектов в Python
  27. Создание Radio кнопок в tkinter
  28. Разработка Telegram-ботов
  29. Разработка игры Pong с turtle
  30. Модуль subprocess: запуск внешних команд
  31. Управление экспортом элементов
  32. Определение объема памяти объекта
  33. Явный импорт в Python
  34. Использование модуля __future__
  35. Создание именованных кортежей в Python
  36. Управление асинхронными задачами с помощью Semaphore
  37. Функция format() в Python
  38. Операторы увеличения и уменьшения в Python
  39. Нахождение самого длинного слова в списке с помощью max
  40. Оптимизация сравнения в Python
  41. Условные выражения в Python
  42. Отправка HTTP-запросов с User-Agent
  43. Функции map, filter, reduce
  44. Создание вкладок с TKinter
  45. Ускорение кода с помощью векторизации
  46. Python 3.12: переиспользование кавычек
  47. Объединение строк с помощью метода join
  48. Просмотр атрибутов и методов класса

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