【问题标题】:Hint that return type is the same as the argument提示返回类型与参数相同
【发布时间】: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


【解决方案1】:

这样做:

T = t.TypeVar("T")


def get_request_data(RequestSchema: t.Type[T]) -> T:
    ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2018-12-24
    • 2019-12-23
    • 2013-10-13
    • 1970-01-01
    • 2020-05-26
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多