Skip to content

Decorator

Определение#

Декоратор — это языковая конструкция (механизм), которая позволяет добавлять новый функционал к нашей функции, не видоизменяя саму функцию.

Как это работает#

Декоратор создаёт Wrapper (обёртку) вокруг исходной функции:

  • Исходная функция передаётся в декоратор как аргумент.
  • Декоратор возвращает новую функцию-обёртку (wrapper).
  • Обёртка может выполнить код до и после вызова оригинальной функции.
  • При этом сама декорируемая функция остаётся нетронутой — меняется только способ её вызова

Эквивалентная запись декоратора @empty_deco без синтаксического сахара:
my_func = empty_deco(my_func)

Пример#

    from typing import Callable
    import time

    def empty_deco(func):  # Identity decorator
        def wrapper(): # Создание обёртки
            start = time.time()
            res = func()
            end = time.time()
            print(f"Исполнение заняло {end-start}")
        return wrapper

    # Decorator
    @empty_deco
    def my_func():
        time.sleep(0.6)
        return 124

    print(my_func())