python - pydantic 和抽象类的子类
问题描述
我正在尝试将 pydantic 与如下所示的模式一起使用:
class Base(BaseModel, ABC):
common: int
class Child1(Base):
child1: int
class Child2(Base):
child2: int
class Response(BaseModel):
events: List[Base]
events = [{'common':1, 'child1': 10}, {'common': 2, 'child2': 20}]
resp = Response(events=events)
resp.events
#Out[49]: [<Base common=10>, <Base common=3>]
它只占用了 Base 类的字段,而忽略了其余部分。如何使用 pydantic 进行这种继承?我希望事件是子类的实例列表Base
解决方案
现在最好的方法是使用Union
,比如
class Response(BaseModel):
events: List[Union[Child2, Child1, Base]]
注意 Union 中的顺序很重要:pydantic 会将您的输入数据与Child2
, then Child1
, then进行匹配Base
;因此您的上述事件数据应该得到正确验证。请参阅有关Union
order的警告。
在未来,鉴别器可能能够以更强大的方式做类似的事情。
本期还有更多相关事宜的信息。
推荐阅读
- laravel - 在 Laravel 5.8 中返回响应之前处理数据中的关系
- java - 尾递归与非尾递归
- sql - 通过创建脚本的最后修改日期文件系统
- java - Java Swing:JTextArea 填充整个分配的空间
- c# - 如何使用串口转换器连接支付设备?(支付设备:Spire Payments SPc5)
- google-authentication - 赛普拉斯为 Google Authenticator 生成过时的代码
- ios - 如何在swiftUI中执行弹簧动画?
- webots - 锁定后如何连接连接器
- python - 在烧瓶应用程序中绘图以测量实时数据
- spring - 有没有办法在 TestExecutionListener 中获取对 Spring 应用程序上下文的引用?