【发布时间】:2022-01-19 14:37:11
【问题描述】:
我想要一个函数来接受 Pydantic 模型并返回它的实例。我希望 VS Code 能够理解返回的类型并提供自动完成功能。这没有按预期工作:
T = pydantic.BaseModel
def get_request_data(RequestSchema: typing.Type[T]) -> T:
try:
return RequestSchema(**flask.request.get_json())
except pydantic.ValidationError as exc:
...
class PagInputSchema(pydantic.BaseModel):
dataset_id: int = pydantic.Field(alias='datasetId')
模型字段名称不会自动完成:
【问题讨论】:
-
正如您在代码示例中指出的那样,您需要删除单一类型约束。如果您希望类型为
pydantic.BaseModel,则只使用它,或者您也可以使用类型别名。 -
@a_guest 我的意思不是让这段代码编译,我需要能够为传递给函数的特定模型的返回实例进行自动完成工作。在屏幕截图中,我希望
dataset_id被建议用于自动完成。 -
您的类型检查器无法处理无效的类型注释,因此它不知道您的意思。因此,它无法推断
PagInputSchema的类型。自动完成也会有同样的问题。 -
T = p.BaseModel产生相同的结果。我试过了。很抱歉可能与相关的 SO 答案混淆。 -
@warvariuc 自动完成工具的工作方式与类型检查器类似;如果类型检查器无法推断类型,则自动完成工具也不会这样做。因此,与 mypy 进行交叉检查是有意义的,因为正如我所提到的,如果 mypy 通过,那么这绝对是一个 Visual Studio 问题。
标签: python python-3.x visual-studio-code type-hinting