Ответ
Декоратор @computed_field в Pydantic (начиная с v2) используется для создания вычисляемых полей, значения которых генерируются на основе других полей модели. Эти поля не являются частью входных данных, но включаются в результат сериализации (например, при вызове .model_dump()).
Основные области применения:
- Производные данные: Создание полей, которые являются результатом вычислений над другими полями (например,
full_nameизfirst_nameиlast_name). - Агрегация: Вычисление итоговых значений, таких как общая стоимость или площадь.
- Форматирование: Представление данных в удобном для вывода формате без изменения исходных полей.
Пример:
from pydantic import BaseModel, computed_field
class Order(BaseModel):
price: float
quantity: int
@computed_field
@property
def total_cost(self) -> float:
"""Вычисляет общую стоимость заказа."""
return self.price * self.quantity
# Создаем экземпляр
order = Order(price=10.5, quantity=4)
# Вычисляемое поле доступно как обычный атрибут
print(order.total_cost) # Вывод: 42.0
# Поле включается в сериализованный объект
print(order.model_dump())
# Вывод: {'price': 10.5, 'quantity': 4, 'total_cost': 42.0}
Ключевые отличия от стандартного @property:
В отличие от обычного @property, @computed_field полностью интегрируется с экосистемой Pydantic:
- Сериализация: Поле автоматически включается в вывод
.model_dump()и.model_dump_json(). - JSON Schema: Поле попадает в генерируемую JSON Schema, что важно для интеграции с фреймворками вроде FastAPI для автоматической генерации документации.