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

如何在Pydantic v2中复用通用Decimal字段定义?

如何在Pydantic v2中复用通用Decimal字段定义?

嘿,我完全懂你的烦恼——重复写一模一样的字段类型和Field配置实在太啰嗦了!针对你在Pydantic v2里想复用这类Decimal字段定义的需求,这里有个能彻底解决问题的方案,帮你把类型和配置都封装起来,再也不用重复写Decimal | None了:

核心思路:用Annotated封装类型与字段配置

在Pydantic v2中,Annotated是处理这类元数据复用的绝佳工具,我们可以把字段类型(Decimal | None)和通用的Field配置打包成一个可复用的函数,只需要传入你要自定义的description即可:

from typing import Annotated, Optional
from pydantic import BaseModel, Field
from decimal import Decimal

def BenchmarkField(description: str) -> Annotated[Optional[Decimal], Field]:
    return Annotated[
        Optional[Decimal],
        Field(
            default=None,
            max_digits=80,
            decimal_places=5,
            description=description,
            json_schema_extra={"type": "display"}
        )
    ]

# 现在使用起来超简洁!
class ModalA(BaseModel):
    benchmark2: BenchmarkField("Benchmark 2")
    benchmark3: BenchmarkField("Benchmark 3")
    benchmark4: BenchmarkField("Benchmark 4")

为什么这个方法有效?

Pydantic v2会自动识别Annotated元组里的Field实例,把它作为对应字段的配置;同时元组里的第一个元素就是字段的类型(这里是Optional[Decimal],也就是你之前写的Decimal | None)。这样一来,你只需要调用BenchmarkField并传入自定义的描述,就能完成整个字段的定义,完全没有重复代码。

如果你之后需要调整通用配置(比如修改max_digits或者json_schema_extra),只需要在BenchmarkField函数里改一次,所有用到这个字段的模型都会自动生效,维护起来也超方便!

备注:内容来源于stack exchange,提问作者ejlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:58:00