You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为父类BaseModel添加类型提示,让子类可为部分字段设默认值

解决Pydantic子类设置默认值后mypy提示缺少父类字段的问题

你遇到的问题是因为子类中直接赋值first = "1"的方式没有被Pydantic和mypy识别为字段的默认值,父类里的first: str被标记为必填字段,所以mypy会报错。要解决这个问题,需要在子类中显式声明字段的类型并设置默认值,让类型检查工具和Pydantic都能识别这些值是字段的默认值。

修正方案1:显式添加类型注解并设置默认值

from pydantic import BaseModel


class Parent(BaseModel):
    first: str
    second: str
    third: str

    def run(self):
        print(self.first + self.second + self.third)


class Child(Parent):
    first: str = "1"  # 明确标记为str类型并设置默认值
    second: str = "2"


c = Child(third="3")  # mypy不再报错
c.run()  # 输出结果:123

修正方案2:使用Pydantic的Field定义默认值

如果需要更复杂的字段配置(比如添加描述、验证规则),可以用Field来设置默认值:

from pydantic import BaseModel, Field


class Parent(BaseModel):
    first: str
    second: str
    third: str

    def run(self):
        print(self.first + self.second + self.third)


class Child(Parent):
    first: str = Field(default="1")
    second: str = Field(default="2")


c = Child(third="3")  # mypy不再报错

为什么原来的写法不行?

直接写first = "1"只是给Child类添加了一个普通类属性,并没有覆盖父类中定义的first字段的必填性。通过显式添加类型注解(或用Field),Pydantic会将其识别为字段的默认值,同时mypy也能正确推断这两个参数不再是实例化时的必填项。

内容的提问来源于stack exchange,提问作者Oliver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:42:38