Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Паттерн Декоратор: назначение и практическое применение
Что такое паттерн Декоратор?
Паттерн Декоратор (Decorator) — это структурный паттерн проектирования, который позволяет динамически добавлять новые функции к объектам во время выполнения программы без изменения их исходного кода. Декоратор оборачивает объект и предоставляет ему новое поведение.
Зачем нужен паттерн?
1. Расширяемость без изменения исходного кода
- Можно добавлять функциональность к существующим классам без их модификации
- Это следует принципу Open/Closed Principle (открыт для расширения, закрыт для модификации)
2. Динамическое добавление функций
- В отличие от наследования, декоратор позволяет комбинировать функции в runtime
- Можно применить несколько декораторов подряд (цепочка декораторов)
3. Разделение ответственности
- Каждый декоратор отвечает за одну функцию
- Упрощает тестирование и поддержку кода
Примеры в Data Science
# Пример 1: Логирование времени выполнения функции
import time
from functools import wraps
def timer_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
print(f"Функция {func.__name__} выполнена за {time.time() - start:.2f}с")
return result
return wrapper
@timer_decorator
def train_model(data):
time.sleep(2)
return "Model trained"
# Пример 2: Кэширование результатов
def cache_decorator(func):
cache = {}
@wraps(func)
def wrapper(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]
return wrapper
@cache_decorator
def expensive_calculation(n):
return sum(range(n))
# Пример 3: Валидация входных данных
def validate_input(func):
@wraps(func)
def wrapper(data, **kwargs):
if data is None or len(data) == 0:
raise ValueError("Data cannot be empty")
return func(data, **kwargs)
return wrapper
@validate_input
def preprocess_data(data):
return data.normalize()
Практическое применение в ML pipeline
# Цепочка декораторов для ML процесса
@timer_decorator
@validate_input
@cache_decorator
def preprocess_and_train(data):
# Расчёты и обучение модели
return model
Преимущества и недостатки
Преимущества:
- Гибкость и расширяемость
- Избегаем explosion of subclasses
- Легко комбинировать функции
- Соответствует принципам SOLID
Недостатки:
- Может усложнить код при чрезмерном использовании
- Цепочка декораторов может быть трудна для отладки
- Порядок декораторов может быть важен
Заключение
Паттерн Декоратор — это мощный инструмент для написания чистого, модульного и расширяемого кода. В Data Science он часто используется для добавления функциональности к функциям обработки данных и машинного обучения.
Похожие вопросы
- Когда начал программировать?
- Как посчитать размер каждой группы при группировке в SQL?
- Как обрабатывать пропущенные значения в данных?
- По каким параметрам минимизируется функция потерь
- Какие знаешь языки программирования?
- Что такое ООП?
- Как отсортировать строку в Python при минимальной памяти?
- Какие задачи выполнял на последнем месте работы?
- Что такое R-squared (коэффициент детерминации)?
- Какие знаешь типы JOIN?
- Какой процент от датасета брать на валидацию?
- Какую зависимость ищет корреляция?
- Как происходило взаимодействие в команде?
- Чем хочешь заниматься на новой работе?
- Назови зоны роста
- Как построить модель для классификации изображений на бинарной маске с квадратами, кругами и треугольниками?
- Можешь ли проинтерпретировать L1
- Как производятся рекоммендации при холодном старте?
- Что такое рекуррентные нейронные сети (RNN)?
- Как оператор GROUP BY обрабатывает поля с NULL?