Pydantic выполняет автоматическое преобразование типа, когда тип свойства не соответствует ожидаемому. Я считаю, что именно поэтому (удобно) можно присвоить значение свойства int enum класса через его необработанное значение int.
Однако у меня есть сценарий, в котором я хочу избежать такого поведения и вместо этого получить сообщение об ошибке проверки, если свойство не относится к ожидаемому типу. См. Следующий пример:
from pydantic import BaseModel
from typing import List
class Common(BaseModel):
def __init__(self, **kwargs):
super().__init__(**kwargs)
print(f"created {self.__class__.__name__} with {kwargs}")
class Child(Common):
child_prop: int = None
class Parent(Common):
child: Child
class Imposter(Common):
imposter_prop: int
parent = Parent(
child=Imposter(imposter_prop=0)
)
print(f"is child: {isinstance(parent.child, Child)}")
Результат выполнения этого модуля:
created Imposter with {'imposter_prop': 0}
created Child with {'imposter_prop': 0}
created Parent with {'child': Imposter(imposter_prop=0)}
is child: True
Как видите, Pydantic с радостью позволяет мне создать Parent
с объектом Imposter
для свойства, которое должно быть Child
. Он поддерживает это, создавая Child
, используя свойства Imposter
. Я не хочу, чтобы это случилось.
Я просмотрел документацию Pydantic, но ни один из вариантов конфигурации не бросается мне в глаза как кандидат на изменение этого поведения. Могу ли я что-нибудь сделать, чтобы предотвратить эту попытку преобразования типа?