@decorator1
@decorator2
def my_function():
pass
В этом случае, `my_function` сначала будет декорирована `decorator2`, а затем `decorator1`.
def my_function():
pass
my_function = decorator1(decorator2(my_function))
Этот способ эквивалентен использованию синтаксического сахара.
На Python можно применять несколько декораторов к одной функции, просто расположив их друг над другом, перед определением функции. Порядок применения декораторов важен: они применяются снизу вверх.
Синтаксис выглядит так:
@decorator1
@decorator2
def my_function(arg1, arg2):
# Тело функции
pass
В этом примере, сначала будет применен decorator2
к функции my_function
, а затем к результату применения decorator2
будет применен decorator1
.
Это эквивалентно следующему коду:
def my_function(arg1, arg2):
# Тело функции
pass
my_function = decorator1(decorator2(my_function))
Пример:
def bold(func):
def wrapper(*args, **kwargs):
return "<b>" + func(*args, **kwargs) + "</b>"
return wrapper
def italic(func):
def wrapper(*args, **kwargs):
return "<i>" + func(*args, **kwargs) + "</i>"
return wrapper
@bold
@italic
def get_message():
return "Привет!"
print(get_message()) # Вывод: <b><i>Привет!</i></b>
В этом примере italic
применяется первым, оборачивая строку "Привет!" в теги <i>
и </i>
. Затем bold
применяется к результату, оборачивая все в теги <b>
и </b>
.
Важно помнить: порядок декораторов имеет значение, так как каждый декоратор получает на вход результат работы предыдущего.