С какими паттернами проектирования ты работал
Что проверяют
Работали ли вы с паттернами на практике или выучили список из книги «банды четырёх». Интервьюер ждёт два-три паттерна с реальной задачей за каждым и почти всегда спрашивает следом: «А как это выглядит именно в Python, где функции и модули уже объекты первого класса?»
Как отвечать
Назовите то, что действительно применяли, и сразу покажите питоновскую форму, а не перевод с Java:
- Strategy: в Python это чаще всего не иерархия классов, а функция или
Callable, переданная параметром. Словарь{"csv": export_csv, "xlsx": export_xlsx}уже стратегия; - Factory и реестр: выбор класса по ключу из конфига, часто через декоратор, который регистрирует класс в словаре. Так устроены плагины и обработчики форматов;
- Singleton: модуль в Python импортируется один раз, поэтому объект на уровне модуля решает задачу без
__new__. Для ленивой инициализации хватаетfunctools.cacheна функции-фабрике; - Decorator: синтаксис
@иfunctools.wrapsдля ретраев, логирования, кеша. Стоит оговорить, что питоновский декоратор и паттерн GoF похожи идеей, но не тождественны; - Observer: сигналы Django (
post_save), события в очередях, колбэки; - Adapter: обёртка над сторонним SDK, чтобы остальной код зависел от вашего интерфейса (
typing.Protocol), а не от чужой библиотеки; - Unit of Work и Repository:
Sessionв SQLAlchemy по сути и есть Unit of Work, а репозиторий отделяет бизнес-логику от ORM; - Dependency Injection:
Dependsв FastAPI.
К каждому пункту добавьте одну фразу о задаче: что было до, почему выбрали этот паттерн, что стало проще тестировать или расширять.
Где спотыкаются
Пишут Singleton через __new__ и не замечают, что __init__ всё равно вызывается при каждом создании и перезаписывает состояние. Заодно такой объект трудно подменить в тестах.
Хранят список подписчиков Observer атрибутом класса (_observers = [] прямо в теле класса). Список получается общим для всех экземпляров, и подписчики одного субъекта получают чужие события.
Перечисляют два десятка паттернов без единого примера из своего кода. Лучше три с историей, чем словарь терминов, по которому интервьюер тут же начнёт задавать вопросы.