Назад к вопросам
Junior
71
questionbank

Что возвращает декоратор?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Декоратор в Python возвращает функцию (или любой другой вызываемый объект), которая заменит декорируемую функцию.

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Перед вызовом функции")
        result = func(*args, **kwargs) # Вызов исходной функции
        print("После вызова функции")
        return result
    return wrapper # Декоратор возвращает внутреннюю функцию wrapper

@my_decorator
def say_hello():
    print("Привет!")

say_hello()
# Вывод:
# Перед вызовом функции
# Привет!
# После вызова функции

Основные моменты:

  • Декоратор принимает декорируемую функцию в качестве аргумента.
  • Внутри декоратора определяется новая функция (обычно называемая wrapper или decorator_func).
  • Эта новая функция содержит логику, которую декоратор добавляет (до или после вызова исходной функции).
  • Новая функция вызывает исходную функцию.
  • Декоратор возвращает эту новую функцию.

Таким образом, когда функция декорируется с помощью @decorator_name, по сути происходит следующее:

def original_function():
    pass

original_function = decorator_name(original_function)

Получается, что имя original_function теперь ссылается на функцию, возвращенную decorator_name.