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

为相似API标准化Pydantic模型 实现代码复用

复用Pydantic模型处理字段名不同的相似API

针对这种结构一致仅字段名不同的API场景,最简洁高效的方式是利用Pydantic泛型复用通用模型结构,仅为每个API定义专属的字段类即可,具体实现如下:

改造后的完整代码

from typing import List, Generic, TypeVar
from pydantic import BaseModel, GenericModel

# 定义泛型类型变量,用于指代不同API的记录模型
RecordType = TypeVar('RecordType')

# 通用的Data结构,复用records和count字段
class StandardData(GenericModel, Generic[RecordType]):
    records: List[RecordType]
    count: int

# 通用的顶层模型,复用status、message、data、code字段
class CommonModel(GenericModel, Generic[RecordType]):
    status: bool
    message: str
    data: StandardData[RecordType]
    code: int

# ---------------- Api1 相关模型 ----------------
api1 = {
    'status': True,
    'message': 'Successful',
    'data': {
        'records': [{
            'api1field1': 'api1value1',
            'api1field2': 'api1value2',
            'api1field3': 'api1value3'
        }],
        'count': 1
    },
    'code': 200
}

class Api1Record(BaseModel):
    api1field1: str
    api1field2: str
    api1field3: str

# 绑定Api1的记录模型到通用模型
Api1Model = CommonModel[Api1Record]
model1 = Api1Model(**api1)

# ---------------- Api2 相关模型 ----------------
api2 = {
    'status': True,
    'message': 'Successful',
    'data': {
        'records': [
            {
                'api2field1': 'api2value1',
                'api2field2': 'api2value2',
                'api2field3': 'api2value3'
            },
            {
                'api2field1': 'api2value4',
                'api2field2': 'api2value5',
                'api2field3': 'api2value6'
            }
        ],
        'count': 2
    },
    'code': 200
}

class Api2Record(BaseModel):
    api2field1: str
    api2field2: str
    api2field3: str

# 绑定Api2的记录模型到通用模型
Api2Model = CommonModel[Api2Record]
model2 = Api2Model(**api2)

# 验证结果示例
print(model1.data.records[0].api1field1)  # 输出: api1value1
print(model2.data.records[1].api2field2)  # 输出: api2value5

核心思路

  1. 用GenericModel和TypeVar搭建通用模型框架,把变化的部分(不同API的记录字段)抽离为泛型参数
  2. 每个API仅需定义专属的记录字段类(如Api1Record、Api2Record),字段名直接对应各自API的返回字段
  3. 通过CommonModel[RecordClass]的方式,快速生成对应API的完整模型,完全复用通用结构

后续新增Api3时,仅需重复定义Api3Record类并绑定到CommonModel即可,无需修改任何通用模型代码,复用性极强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:45:24