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

如何用类型别名实现Pydantic约束列表并通过Mypy类型检查?

解决方案

要同时满足三个目标,你可以结合类型别名和Pydantic的Annotated(Pydantic v2原生支持,v1版本需从typing_extensions导入)实现,既复用约束逻辑,又能通过Mypy类型检查:

1. 导入必要模块

from pydantic import BaseModel, conlist
from typing import Annotated, List
# Pydantic v1版本请替换为:
# from typing_extensions import Annotated

2. 定义可复用的带约束类型

用Annotated把Pydantic的约束规则和标准List类型结合——Mypy能识别标准List类型,Pydantic则会读取并应用conlist的校验规则:

class A(BaseModel):
    x: int

# 定义复用类型:元素为A的列表,长度≥1
ListA = Annotated[List[A], conlist(A, min_items=1)]

3. 在模型中复用该类型

class B(BaseModel):
    items: ListA  # 注意:`as`是Python关键字,不能用作字段名,这里改用`items`,也可以用`as_`规避冲突

class C(BaseModel):
    items: ListA

关键说明

  • 约束生效:Annotated中的conlist会让Pydantic强制执行列表长度≥1的校验,空列表会直接触发验证错误。
  • Mypy兼容:对Mypy而言,Annotated[List[A], ...]等价于标准的List[A]类型,能顺利通过类型检查。
  • 代码复用:ListA可以在任意模型中重复使用,无需重复编写约束逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:58:17