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

如何访问Pydantic BaseModel中Field的自定义关键字参数my_key?

访问Pydantic Field中的自定义关键字参数my_key

自定义关键字参数(比如my_key)不会出现在模型实例的__dict__里,因为它属于字段的元数据,存储在模型的字段定义中,而非实例的属性值里。你可以通过以下方式访问:

Pydantic v2 版本

使用模型的model_fields属性获取所有字段定义,再从字段的field_info.extra字典中提取自定义参数:

from pydantic import BaseModel, Field

class MyModel(BaseModel):
    x: str = Field(default=None, my_key=7)

    def print_field_objects(self):
        # 遍历所有字段
        for field_name, field in self.model_fields.items():
            # 从extra中获取自定义参数
            my_key_val = field.field_info.extra.get("my_key")
            if my_key_val is not None:
                print(f"字段 {field_name} 的my_key值: {my_key_val}")

# 测试调用
model = MyModel(x="hello")
model.print_field_objects()  # 输出:字段 x 的my_key值: 7

Pydantic v1 版本

如果使用旧版Pydantic,替换为__fields__属性访问字段定义:

from pydantic import BaseModel, Field

class MyModel(BaseModel):
    x: str = Field(default=None, my_key=7)

    def print_field_objects(self):
        for field_name, field in self.__fields__.items():
            my_key_val = field.field_info.extra.get("my_key")
            if my_key_val is not None:
                print(f"字段 {field_name} 的my_key值: {my_key_val}")

FastAPI 中使用示例

在FastAPI端点中,你可以直接访问模型的字段元数据,无需实例化也能获取:

from fastapi import FastAPI
from pydantic import BaseModel, Field

app = FastAPI()

class MyModel(BaseModel):
    x: str = Field(default=None, my_key=7)

@app.get("/get-my-key")
def get_my_key():
    # 获取单个字段的my_key值
    x_my_key = MyModel.model_fields["x"].field_info.extra.get("my_key")
    return {"field_x_my_key": x_my_key}

# 访问 /get-my-key 会返回 {"field_x_my_key":7}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:20:27