我发现下面的反派行为令人惊讶
首先,我创建项,然后使用ItemExtended对其进行扩展,以包含一个附加属性。现在我创建了ItemContainer,它可以获取项目列表
from typing import List
from pydantic import BaseModel
class Item(BaseModel):
thing: int
class ItemExtended(Item):
extra_thing: int = 456
class ItemContainer(BaseModel):
items: List[Item]
出于某种原因,如果我现在创建一个ItemContainer实例,传入一个ItemExtended,而不是将ItemExtended转换为一个Item,那么它只是被允许的,还有不需要的默认值
就是这个,
ItemContainer(items=[ItemExtended(thing=123)])
变成
ItemContainer(items=[ItemExtended(thing=123, extra_thing=456)])
有没有一种方法可以严格执行items类型,从而
ItemContainer(items=[ItemExtended(thing=123)])
变成
ItemContainer(items=[Item(thing=123)])
您要求执行的操作违反了Python对键入的思考。Pydantic正在做一些直观的事情:你要求它是一个
Item
,事实上,它是一个Item
如果您想严格要求所提供的内容,请创建一个更严格的子类:
但是,我认为您要求的是自动转换,您可以为其创建一个验证器
相关问题 更多 >
编程相关推荐