Как сделать декоратор в 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 их можно написать как в виде функций, так и в виде классов. Надеюсь, что эта статья помогла вам понять, как работают декораторы и как их использовать в своем коде.