#13783·pydantic

除 mypy 外启用对已键入的“ 模型 构造” 的支持( 包括实例执行)

作者: maddinkunze创建于 2026年9月9日更新于 2026年9月17日
标签feature requesttopic-type checking

初始检查

  • 我搜索了Google & GitHub 类似请求 找不到任何东西
  • 我读过并遵循docs,仍然认为这个功能缺失.

说明

嗨,伙计们! 我真的很爱烟火,但有以下的问题 我真的希望看到解决 我希望我能帮助:

TL; DR: ‘model construct (.)' 是否应该被打入(类似于 init )? 如果是的话,你对我的"复制"‘ init '方法签名的解决方案有什么看法? (如果不是,那么是否有任何官方方式可以对模型进行类型检查而无需验证? )

想想这个简单的模型:

[Python] 类用户( BaseModel ) : id: int = 字段(默认 factory=lambda: randint(1,1000)) 名称: str


如果想要创建数据显示类型在类型检查时已知的模型实例,它们必须选择“用户(id=7,名=“John Doe”)”或“用户.model construct(id=7,名=“John Doe”)”

我的问题是,第一个选项在运行时进行冗余验证(假定类型检查员正确性),第二个选项无法进行任何类型核对,因为签名目前是`model construct(**kwargs: Any)'。

根据你的[docs://pydantic.dev/docs/validation/latest/ institutions/dev-tools/mypy/#generate-a-typed-sign- for-model construct],我的py插件为mypy提供了这种行为,但很多用户依赖其他类型检查工具,如果这个功能也能得到他们的支持,那将是巨大的.

以下是我提出的一个简单的(纯粹基于类型)解决方案, 似乎适用于这个用例, 我想先得到一些反馈, 基本上,它只是将 `   (.) 函数的 ParamSpec 复制到“ 模型构造” 方法中:

```2ZZ
从打入  扩展导入协议, 类型Var, ParamSpec, 可调用, TYPE  CHECKING
从 pydantic 导入基底模

P = ParamSpec ("P").
T = TypeVar (“ T ”)

类模型 构造 装饰器:
def init (本身,f):通过
def  get (自身,例:无,所有者:可调用 [P, T] -- > 可调用 [P, T] :
返回拥有者

类用户( BaseModel ) :
id: int = 字段(默认 factory=lambda: randint(1,1000))
名称: str

如果TYPE 欢呼:
@ model  构造  装饰器
def 模型  构造  类型( 自 ):...
其他情况:
@ 类方法
df 模型  构造  类型( cls, *args, ** kwargs) :
返回 cls.model 构造 (*args, **kwargs)

User.model construct typed(id="7")#-> 现在pyright中也显示一个类型错误

(想法是,我目前所命名的模型-构造-类型(.)'将作为模型-构造(.)'在`基准模型'上实施)

-- -- . . .

现在有多个可解的问题,Ve留作简洁之用,但这里是他们对任何感兴趣的人的解决办法:

< 细节> <摘要>->b>1. 对当前参数的 < code fields set 参数如何 . . . . . . .

内容来源: pydantic/pydantic