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

Pydantic模型定义:选择typing模块类型还是Python原生类型?

Pydantic模型定义:选择typing模块类型还是Python原生类型?

你在使用Pydantic做数据验证时发现的这个问题很常见——Python 3.9+确实同时支持两种类型定义方式,而且都能正常运行。先再明确下两种写法的示例:

方式一:使用typing模块的类型

from typing import List
from pydantic import BaseModel

class MyModel(BaseModel):
    report: str
    results: List[int]  # 从typing导入的List类型

example = MyModel(report="Summary", results=[1, 2, 3])
print(example)

方式二:使用Python原生类型(3.9+支持)

from pydantic import BaseModel

class MyModel(BaseModel):
    report: str
    results: list[int]  # 原生list加泛型参数

example = MyModel(report="Summary", results=[1, 2, 3])
print(example)

推荐哪种?为什么?

如果你的项目运行在Python 3.9及以上版本,我强烈推荐使用原生类型写法,原因有这几点:

  • 代码更简洁:不用额外导入typing模块里的List、Dict这些类型,减少了导入语句,代码看起来更清爽,也符合现代Python的写法习惯。
  • 官方认可的趋势:Pydantic从V1就开始支持原生泛型类型,到了V2更是对原生类型做了全面优化,官方文档里的示例也越来越偏向用原生类型,这显然是官方推荐的方向。
  • 风格统一:Python 3.9引入的PEP 585就是为了让原生类型支持泛型,和typing模块的类型功能等价,用原生类型能让你的代码和其他现代Python项目的风格保持一致,避免新旧写法混用的混乱。
  • 功能完全一致:不管用哪种写法,Pydantic的数据验证、序列化/反序列化逻辑都是一模一样的,不会有功能上的差异。

当然,如果你的项目需要兼容Python 3.8及更早的版本,那只能选择typing模块的类型——毕竟原生泛型是3.9才有的特性。但只要环境允许,原生类型肯定是更好的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:43:10