假设我有:
class Thing(pydantic.BaseModel):
one: int
two: str
three: bool
adapter = pydantic.TypeAdapter(dict[str, Thing])
raw_data = {"this": {"one": 1, "two": "zwei"}, "that": {"one": 111, "two": "dos"}}
您可以看到,我想要使用
raw_data
转换(验证)的 adapter
包含两个缺少属性 three
的项目。我希望仍然能够验证这一点,但为缺失的属性 True
提供默认值 three
。 但是,我不想想在类Thing
的定义中这样做,因为在我的用例中,这个默认行为不是类Thing
的固有部分。我不希望此类的用户假设属性 three
始终有默认值;我只想提供一个默认值 这次,仅针对这个特定的 raw_data
,因为我预计 这个特定的 raw_data
由于某种原因会丢失 three
。 (特别是,这个问题看起来很相似,但并没有解决我的问题。)所以,我想要的是这样的:
things_i_want = adapter.validate_python(raw_data, default={"three": True})
或者:
or_this = adapter.validate_python(raw_data, default=pydantic.Default(three=True))
这在 Pydantic 中可能吗?
我不知道有一种 Pydantic 方法可以在验证时指定默认值。但是,如果您不想修改
Thing
类,您始终可以在私有范围内对其进行子类化吗?
import pydantic
class Thing(pydantic.BaseModel):
one: int
two: str
three: bool
def validate(data: dict[str, dict]):
class _Thing(Thing):
three: str = True
adapter = pydantic.TypeAdapter(dict[str, _Thing])
adapter.validate_python(data)
raw_data = {"this": {"one": 1, "two": "zwei"}, "that": {"one": 111, "two": "dos"}}
validate(raw_data)