В каком стиле писал код на Python и какие технологии использовал?

«В каком стиле писал код на Python и какие технологии использовал?» — вопрос из категории Python, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я придерживаюсь стиля PEP 8 и принципов чистого кода. В зависимости от задачи использовал разные парадигмы:

  • Процедурный/скриптовый стиль — для ETL-скриптов, быстрой обработки данных.
  • Объектно-ориентированный (ООП) — для построения сложных, расширяемых систем (например, фреймворков для тестирования или ядер микросервисов).
  • Функциональный подход — там, где это уместно (работа с map, filter, functools, иммутабельность).

Стек технологий:

  • Обработка данных: Pandas, NumPy, PySpark (для больших объемов).
  • Веб и API: FastAPI, Flask, aiohttp для асинхронных задач.
  • Работа с БД: SQLAlchemy (Core + ORM), Alembic для миграций, драйверы asyncpg/aiomysql.
  • Оркестрация и DevOps: Apache Airflow для пайплайнов, Docker, Poetry для управления зависимостями.
  • Тестирование: pytest, unittest, hypothesis.

Пример (ООП-подход для сервиса):

from abc import ABC, abstractmethod
from typing import List
from pydantic import BaseModel

# Data model
class DataRecord(BaseModel):
    price: float
    living_area: float
    district: str
    type: str

# Abstract processor
class DataProcessor(ABC):
    @abstractmethod
    def filter_and_aggregate(self, records: List[DataRecord]): ...

# Concrete implementation
class RealEstateProcessor(DataProcessor):
    MIN_PRICE = 5000
    MIN_AREA = 20

    def filter_and_aggregate(self, records: List[DataRecord]):
        filtered = [
            r for r in records
            if r.price >= self.MIN_PRICE or r.living_area >= self.MIN_AREA
        ]
        # ... aggregation logic using pandas or pure Python
        return result

# Usage
processor = RealEstateProcessor()
result = processor.filter_and_aggregate(records_list)

Такой подход улучшает читаемость, тестируемость и позволяет легко подменять реализации.