Работали ли с объектно-ориентированным программированием
Что проверяют
Это вопрос про инженерную культуру, а не про определения. От специалиста по данным ждут, что он умеет выйти за пределы ноутбука и оформить пайплайн так, чтобы его можно было тестировать, переиспользовать и передать команде. Заученные четыре принципа без примера тут ничего не доказывают.
Как отвечать
Начните с того, где ООП реально помогает в ваших задачах.
- Общий контракт: трансформеры и модели живут за интерфейсом
fitиtransform, поэтому любой шаг подставляется вPipelineи участвует в подборе гиперпараметров. Свой шаг делается наследованием отBaseEstimatorиTransformerMixin. - Абстракция над источником: базовый класс или
Protocolс методом чтения, а конкретные реализации для базы, паркета и потока. Тесты подсовывают заглушку вместо базы. - Данные как объекты:
dataclassдля конфигов эксперимента и признаков вместо словарей, где опечатка в ключе выясняется через час обучения. - Композиция вместо наследования: сервис предсказаний получает загрузчик модели и хранилище признаков в конструкторе, а не наследует их.
Про полиморфизм в Python честно скажите, что он чаще достигается утиной типизацией и протоколами, а не глубокой иерархией. Если позиция ближе к дата-инженерии на Go, там классов нет вовсе: те же цели закрываются интерфейсами и встраиванием структур, и это стоит проговорить.
Где спотыкаются
Отвечают определениями из учебника. На просьбу показать своё наследование в реальном коде выясняется, что весь проект это один ноутбук с функциями на сто строк.
Строят иерархию ради переиспользования. Три уровня наследования, где каждый потомок переопределяет половину поведения родителя, читаются хуже, чем две независимые функции.
Третье: инкапсуляцию сводят к подчёркиванию перед именем поля. Речь про то, что объект сам отвечает за свою целостность, а класс, у которого состояние правят снаружи между вызовами, не спасёт никакое подчёркивание.