Для чего используется декоратор @computed_field в Pydantic

«Для чего используется декоратор @computed_field в Pydantic» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Декоратор @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:

  1. Сериализация: Поле автоматически включается в вывод .model_dump() и .model_dump_json().
  2. JSON Schema: Поле попадает в генерируемую JSON Schema, что важно для интеграции с фреймворками вроде FastAPI для автоматической генерации документации.