【发布时间】:2021-04-22 16:48:12
【问题描述】:
我发现以下 Pydantic 行为令人惊讶。
首先我创建 Item,然后用 ItemExtended 扩展它以包含一个附加属性。现在我创建了 ItemContainer,它可以获取 Items 列表。
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)])
有没有办法严格执行项目类型这样的
ItemContainer(items=[ItemExtended(thing=123)])
变成
ItemContainer(items=[Item(thing=123)])
【问题讨论】:
-
公平点,我可以看到
isinstance(ItemExtended(thing=123), Item)返回True但在严格执行的数据模型的上下文中感觉不对。