Где применяют декораторы в реальном коде
Вопрос
Где вы встречали или писали декораторы в реальных проектах? Какие у них подводные камни?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Фреймворки: маршруты Flask/FastAPI, `@pytest.fixture`, `@app.task` в Celery
Сквозная логика: логирование, метрики, ретраи, проверка прав, кеш
Стандартная библиотека: `property`, `classmethod`, `lru_cache`, `dataclass`
Подводные камни: потеря метаданных без `wraps`, побочные эффекты при импорте
Глобальное состояние в декораторе и потокобезопасность
Декоратор скрывает поведение, усложняет отладку
Что могут спросить следом
- Как бы вы сделали декоратор проверки прав доступа?
- Когда лучше middleware или явный вызов, а не декоратор?
Разбор
Образцовый ответ: «Чаще всего декораторы приходят из фреймворков: @app.get в FastAPI регистрирует маршрут при импорте, @pytest.fixture и @pytest.mark.parametrize в тестах, @shared_task в Celery, @login_required в Django. Сам я писал декораторы для сквозной логики, которая не относится к бизнес-смыслу функции: ретраи сетевых вызовов с экспоненциальной задержкой, замер времени и отправка метрик, проверка прав доступа к ручке. Из стандартной библиотеки постоянно использую lru_cache, cached_property, dataclass, contextmanager. Подводные камни: без functools.wraps теряются имя и сигнатура, и это ломает, например, генерацию документации; тяжёлый код в теле декоратора выполняется при импорте; состояние в декораторе общее для всех вызовов и потоков; а если декораторов много, поведение функции не видно из её тела, и отлаживать сложнее. Поэтому то, что касается всех запросов, я выношу в middleware, а декоратор оставляю для точечных случаев».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Декоратор с параметрами: сколько уровней
Следующий вопрос
Напишите и объясните декоратор