跳转到内容

Pyrefly

Pyrefly 是一个 Python 类型检查器和语言服务器,内置支持多项 Pydantic 特有功能。Pydantic 和 Pyrefly 安装后,这些支持即可开箱即用,无需额外配置。

Pyrefly 既可作为 IDE 扩展,也可作为 命令行类型检查器 使用。

IDE 扩展

Pyrefly 为您的 Pydantic 模型提供诸如“跳转到定义”和“自动补全”等 IDE 功能。

这是一个签名帮助的示例,它得益于 Pyrefly 对 Pydantic 特有的 validation_alias 关键字的理解

Signature help with the Pyrefly IDE extension

当您输入 Model() 时,Pyrefly 会提示您需要使用名称 x_ 来填充 x 字段。

类型检查器

Pyrefly 还可以在您运行代码之前捕获其中的错误。请看以下示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from pydantic import BaseModel, ConfigDict


class Model1(BaseModel, frozen=True):
    x: int


class Model2(BaseModel):
    model_config = ConfigDict(frozen=True)
    x: int


model1 = Model1(x=0)
model1.x = 1  # validation error: mutating a frozen field

model2 = Model2(x=0)
model2.x = 1  # validation error: mutating a frozen field

由于 Model1 使用标准类型系统功能声明它是不可变的,因此您选择的任何类型检查器都会捕获修改 model1.x 导致的验证错误。然而,没有 Pydantic ConfigDict 类特殊支持的类型检查器将错过修改 model2.x 导致的验证错误。

Pyrefly 捕获了这两个错误

ERROR Cannot set field `x` [read-only]
  --> foo.py:11:1
   |
11 | model1.x = 1  # validation error: mutating a frozen field
   | ^^^^^^^^
   |
  This field belongs to a frozen Pydantic model
ERROR Cannot set field `x` [read-only]
  --> foo.py:14:1
   |
14 | model2.x = 1  # validation error: mutating a frozen field
   | ^^^^^^^^
   |
  This field belongs to a frozen Pydantic model

欲了解更多信息,请参阅 Pyrefly 文档