我使用 Pydantic 定义分层数据,其中存在具有相同属性的模型。
但是,当我保存和加载这些模型时,Pydantic 无法再区分使用了哪个模型,并选择字段类型注释中的第一个模型。
我知道这是基于文档的预期行为。但是,类类型信息对我的应用程序很重要。
在 Pydantic 中区分不同类的推荐方法是什么?一种技巧是简单地向其中一个模型添加一个无关的字段,但我想找到一种更优雅的解决方案。
请参阅下面的简化示例:container使用 类型的数据进行初始化DataB,但在导出和加载之后,newcontainer具有类型的数据DataA,因为它是 类型声明中的第一个元素container.data。
感谢您的帮助!
from abc import ABC
from pydantic import BaseModel #pydantic 1.8.2
from typing import Union
class Data(BaseModel, ABC):
""" base class for a Member """
number: float
class DataA(Data):
""" A type of Data"""
pass
class DataB(Data):
""" Another type of Data """
pass
class Container(BaseModel):
""" container holds a subclass of Data """
data: Union[DataA, …Run Code Online (Sandbox Code Playgroud)