Как сделать декоратор в python

Узнайте больше о декораторах в Python, их применении, синтаксисе и примерах создания декораторов. Получите полное понимание этой важной концепции Python и научитесь писать собственные декораторы для решения своих задач.

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

Создание простого декоратора в Python довольно простое. Вот пример оборачивания функции с помощью декоратора:


def decorator_function(original_function):
    def wrapper_function():
        print('До выполнения функции')
        original_function()
        print('После выполнения функции')
    return wrapper_function

def display():
    print('Оригинальная функция')

decorated_display = decorator_function(display)

decorated_display()

Вышеуказанный пример демонстрирует, что функция decorator_function принимает одну функцию и возвращает другую функцию. В данном примере декоратор добавляет два дополнительных вызова функции print() перед и после выполнения оригинальной функции display(). В результате вывод будет следующим:


До выполнения функции
Оригинальная функция
После выполнения функции

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


class DecoratorClass:
    def __init__(self, original_function):
        self.original_function = original_function

    def __call__(self, *args, **kwargs):
        print('До выполнения функции')
        self.original_function(*args, **kwargs)
        print('После выполнения функции')

@DecoratorClass
def display():
    print('Оригинальная функция')

display()

Этот пример делает то же самое, что и предыдущий: он добавляет два вызова функции print() перед и после вызова оригинальной функции. Результатом будет тот же вывод, показанный выше.

Заключение

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

Ответы (0)