Работали ли вы с объектно-ориентированным кодом?

«Работали ли вы с объектно-ориентированным кодом?» — вопрос из категории ООП, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, постоянно использую ООП для структурирования кода в проектах. Основные принципы применяю следующим образом:

  • Инкапсуляция: Создаю классы для сложных сущностей, скрывая внутреннюю логику за публичными методами. Например, класс DataPipeline с приватными методами для очистки и публичным методом .run().
  • Наследование: Использую для расширения функциональности. Часто создаю абстрактные базовые классы для семейств алгоритмов или кастомные трансформеры, наследуясь от BaseEstimator в scikit-learn.
    
    from sklearn.base import BaseEstimator, TransformerMixin

class LogTransformer(BaseEstimator, TransformerMixin): def init(self, column): self.column = column def fit(self, X, y=None): return self def transform(self, X): X_copy = X.copy() X_copy[self.column] = np.log1p(X_copy[self.column]) return X_copy


*   **Полиморфизм:** Пишу функции, которые работают с объектами разных классов через единый интерфейс (например, все модели имеют метод `.predict()`).
*   **Композиция:** Собираю сложные системы из простых, переиспользуемых компонентов, вместо создания глубоких иерархий наследования.