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

如何在Python运行时基于类型列表生成Union类型用于Pydantic字段声明

实现方案

你要的效果可以通过动态构造Union联合类型实现,类型注解本身不支持直接写列表推导、解包这类运行时表达式,所以需要先把所有允许的模型类型拼成Union再传入字段类型声明。

完整可运行代码

from typing import List, Type, Union
from pydantic import BaseModel

models: List[Type["BaseModel"]] = []

class ModelA(BaseModel):
    some_field: int

class ModelB(BaseModel):
    some_field: int

models.append(ModelA)
models.append(ModelB)

# 动态构造包含所有允许类型的Union
AllowedModelType = Union[tuple(models)]

class ToShowInSwagger(BaseModel):
    types: List[AllowedModelType]

# 测试验证
test_data = ToShowInSwagger(
    types=[
        ModelA(some_field=1),
        ModelB(some_field=2)
    ]
)
# Pydantic v1版本把下面的model_dump_json换成.json()即可
print(test_data.model_dump_json(indent=2))

补充说明

  • 生成的ToShowInSwagger会自动在Swagger文档的types字段下生成anyOf结构,清晰展示所有允许的模型格式
  • 如果要提升反序列化的准确性、避免不同模型字段重叠导致的解析错误,可以给所有模型加统一的鉴别字段,搭配Field(discriminator="type")使用,Swagger也会按不同子类型分类展示
  • 注意要在所有需要允许的模型都添加进models列表之后,再定义ToShowInSwagger,否则会漏掉未加入的类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:54:03