Декораторы и их реализация | Вопросы для собеседования | Skilio
Декораторы и их реализация
Вопрос:

Что такое декораторы в Python и как они работают?

Приведите пример использования декоратора.

Выше ожиданий:

  • Цепочки декораторов
  • Фабрики декораторов
Ответ:

Декораторы — мощная фича в Python, которая позволяет изменять или расширять поведение функций или методов, не изменяя их фактический код. Они следуют паттерну декоратора и реализуются как функция, принимающая другую функцию в качестве входного значения и возвращающая изменённую версию.

Как работают декораторы

  1. Декоратор — это функция, которая принимает функцию в качестве аргумента
  2. Она определяет внутреннюю оберточную функцию, которая добавляет функциональность
  3. Оберточная функция вызывает исходную функцию
  4. Оберточная функция возвращается декоратором

Декораторы используют символ @, размещённый над определениями функций:

@my_decorator
def my_function():
    pass

Этот синтаксис эквивалентен:

def my_function():
    pass
my_function = my_decorator(my_function)

Общие случаи применения

  • Сбор логов: отслеживание вызовов функций
  • Проверка аутентификации и авторизации
  • Измерение времени выполнения функции
  • Кэширование результатов
  • Валидация входных данных
  • Rate limiting
  • Обработка ошибок

Цепочки декораторов

Несколько декораторов могут быть применены к одной функции в цепочке. Они выполняются в порядке от низу вверх:

@decorator1
@decorator2
def function():
    pass

Выполнение происходит как: decorator1(decorator2(function))

Фабрики декораторов

Фабрика декораторов — это функция, которая возвращает настраиваемый декоратор. Это позволяет создавать декораторы, принимающие аргументы для настройки их поведения:

def repeat(n):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(n):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello {name}")

Здесь repeat(3) возвращает декоратор, который выполнит функцию 3 раза.

2
Python Новичок Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.