pydantic 与 mypy 的结合使用

Usage of pydantic with mypy

我正在尝试使用大量使用 pydantic 的 FastAPI 编写应用程序。我还想使用 mypy 对我的代码进行类型检查。如何在不冲突的情况下为 pydantic 和 mypy 使用类型注释?

我知道 type: ignore 评论,但在我看来这是某种作弊 :)

示例:

from pydantic import BaseModel, Schema


class UsersQuery(BaseModel):
    limit: int = Schema(default=100, gt=0, le=100)
    offset: int = Schema(default=0, ge=0)

此代码工作正常,但类型检查失败。

mypy 输出:

error: Incompatible types in assignment (expression has type "Schema", variable has type "int")
error: Incompatible types in assignment (expression has type "Schema", variable has type "int")

type: ignore 是目前唯一的解决方案。

pydantic 的第 1 版应该会在几天内发布,其中 Field(取代 v1 中的 Schema)是一个返回 Any 的函数,应该可以解决这个问题。

tl;dr 等待 v1 发布并得到 fastapi 的支持,您的问题应该会得到解决。