@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>.
Важно помнить: порядок декораторов имеет значение, так как каждый декоратор получает на вход результат работы предыдущего.