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

如何自动识别Pydantic对象的必填属性?

如何自动识别Pydantic对象中的必填属性?

你可以利用Pydantic内置的字段元数据自动识别必填属性,无需手动维护固定列表。以下是针对不同Pydantic版本的实现方案:

Pydantic v2 实现

在Pydantic v2中,模型的model_fields属性包含所有字段的元数据,通过判断字段是否未设置默认值(即default为PydanticUndefined),就能筛选出必填属性:

from pydantic import BaseModel, Field, PydanticUndefined


class MyClass(BaseModel):
    mandatory1: str = Field(description="mandatory")
    mandatory2: str = Field(description="mandatory")
    optional: str = Field(default="", description="optional")

    def mandatory_attributes(self):
        """自动识别所有必填属性"""
        return [
            field_name 
            for field_name, field in self.model_fields.items()
            if field.default is PydanticUndefined
        ]


obj = MyClass(mandatory1="a", mandatory2="b", optional="c")
result = obj.mandatory_attributes()
assert result == ["mandatory1", "mandatory2"]

Pydantic v1 实现

如果你使用的是Pydantic v1版本,可通过__fields__属性访问字段元数据,直接利用字段的required属性判断:

from pydantic import BaseModel, Field


class MyClass(BaseModel):
    mandatory1: str = Field(description="mandatory")
    mandatory2: str = Field(description="mandatory")
    optional: str = Field(default="", description="optional")

    def mandatory_attributes(self):
        """自动识别所有必填属性"""
        return [
            field_name 
            for field_name, field in self.__fields__.items()
            if field.required
        ]


obj = MyClass(mandatory1="a", mandatory2="b", optional="c")
result = obj.mandatory_attributes()
assert result == ["mandatory1", "mandatory2"]

核心逻辑说明

  • 必填属性的本质是创建模型实例时必须传入的字段,也就是未设置默认值的字段
  • Pydantic会自动跟踪字段的必填状态,我们只需读取对应元数据即可完成自动识别

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:12:38