Pydantic模型继承优化:无需重复输入父模型属性的实现方法
解决方案:无需重复父模型属性创建子模型实例
当然可以不用重复输入父类属性,利用Pydantic模型的字段导出功能就能轻松实现,以下是两种常用方法:
方法1:展开父模型实例的字段字典
先创建父模型model_A的实例,然后用**运算符展开它的字段字典,再补充子模型model_B的新增字段即可:
class model_A(BaseModel): Name: str Age: int phone: int class model_B(model_A): email: str location: str # 创建父模型实例 A = model_A(Name="Jon", Age=20, phone=123) # 展开父实例属性,补充子模型字段创建B B = model_B(**A.dict(), email="test@123", location="Earth")
方法2:Pydantic v2 专属简化方式
如果你用的是Pydantic v2版本,可以用model_dump()(替代v1的dict())结合字典合并,或者直接用model_copy方法:
# 方式一:字典合并 B = model_B.model_validate(A.model_dump() | {"email": "test@123", "location": "Earth"}) # 方式二:model_copy 更新字段(需确保父实例可转为子模型类型) B = A.model_copy(update={"email": "test@123", "location": "Earth"}, model=model_B)
注意事项
- 父模型的字段必须满足子模型的验证规则(因为子模型继承了父模型的字段约束)
- 如果父模型有私有字段或不想导出的字段,可以用
dict(exclude={"字段名"})或model_dump(exclude={"字段名"})过滤掉
内容的提问来源于stack exchange,提问作者Masterstack8080
相关产品推荐
相关产品推荐

