Ответ
Я придерживаюсь стиля 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)
Такой подход улучшает читаемость, тестируемость и позволяет легко подменять реализации.