Экземпляр не создастся: возникнет ValidationError из-за отсутствующих обязательных полей. В Pydantic 2.11 первым базовым классом здесь является SecretFlight, поэтому airline остаётся обязательным, как и secret_code.
Определение вывода программы при инициализации модели
Экземпляр не создастся: возникнет ValidationError из-за отсутствующих обязательных полей. В Pydantic 2.11 первым базовым классом здесь является SecretFlight, поэтому airline остаётся обязательным, как и secret_code.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо выяснить, какое значение будет получено после создания экземпляра класса TaskData с помощью словаря task_data.
from pydantic import Field, BaseModel
task_data = {
'flight_id': 5,
'flight_number': 'abc123'
}
class Flight(BaseModel):
flight_id: int
airline: str
flight_number: str
class SecretFlight(Flight):
secret_code: str
class PatchFlight(Flight):
airline: str = Field(default=None)
flight_number: str = Field(default=None)
class TaskData(SecretFlight, PatchFlight):
...
task_data = TaskData(**task_data)
Ответ
Экземпляр не создастся: возникнет ValidationError из-за отсутствующих обязательных полей. В Pydantic 2.11 первым базовым классом здесь является SecretFlight, поэтому airline остаётся обязательным, как и secret_code.
Поля базовых моделей объединяются с приоритетом первого родителя. Поэтому определение airline из SecretFlight перекрывает вариант с default=None из PatchFlight; в переданном словаре нет ни airline, ни secret_code.
Присваивание task_data = TaskData(**task_data) не завершится, исходная переменная останется словарём. Вывода через print в коде нет. Для ясного контракта переопределите нужные поля прямо в TaskData, например airline: str | None = None, и передавайте secret_code, если он обязателен. Аннотация str с default=None не выражает явно разрешение передавать None; используйте объединение типов.
Источник: raw.githubusercontent.com, docs.pydantic.dev.