✨ Магия Python: Как работают декораторы?
Вы постоянно видите их в коде: @bot.message_handler, @app.route, @staticmethod. Но что на самом деле делает этот символ @?
В Python функции - это объекты. Их можно передавать в другие функции, как обычные переменные.
Декоратор - это просто функция, которая принимает другую функцию, "обертывает" её в дополнительный код и возвращает обратно.
Представьте, что у вас есть подарок (функция). Декоратор - это упаковочная бумага. Подарок внутри тот же, но теперь он выглядит и ведет себя немного иначе.
Пример: Декоратор-логгер
Допустим, мы хотим автоматически писать в консоль, когда функция запустилась и когда завершилась.
def my_logger(func):
def wrapper():
print("📢 Запускаю функцию...")
func() # Вызываем оригинальную функцию
print("✅ Функция отработала!")
return wrapper
# Применяем декоратор
@my_logger
def say_hello():
print("Привет, мир!")
# Вызываем
say_hello()
Результат в консоли:
📢 Запускаю функцию...
Привет, мир!
✅ Функция отработала!
🤯 Что происходит под капотом?
Синтаксис с @ - это просто "сахар" (упрощение). На самом деле Python делает вот это:
# Это:
@my_logger
def say_hello(): ...
# Равносильно этому:
def say_hello(): ...
say_hello = my_logger(say_hello)
А как это работает в ботах (@dp.message)?
В библиотеках типа aiogram декораторы часто используются для регистрации.
Когда вы пишете @dp.message(), декоратор не меняет код вашей функции, а сообщает Диспетчеру: "Эй, запомни эту функцию! Если придет сообщение, нужно запустить именно её".
Итог: Декораторы нужны, чтобы добавить логику вокруг функции (проверка прав доступа, замер скорости, логирование), не меняя её код внутри.
Ставь ❤️, если магия рассеялась и стало понятнее!
Подписывайтесь на канал 👉 @python_of