python 3:用mypy进行类型推断?

python 3: type inferencing with mypy?

给定 python 3

中的以下代码段
def foo() -> List[X]: pass

class X:
    def bar(self) -> MYTYPE: pass

对于以下表达式:

[x.bar() for x in foo()]

我可以利用 mypy 包来正确解析上面表达式的 AST 并猜测结果的类型是 List[MYTYPE] 吗?

如果不能,我最好的选择是什么?有什么 ideas/packages 推荐吗?

是的,它会推断出来。这是一个演示:

from typing import List

class MyType:
    pass

class X:
    def bar(self) -> MyType: pass

def foo() -> List[X]: pass  # note the square brackets

bars = [x.bar() for x in foo()]
reveal_type(bars)

然后当您 运行 mypy script.py 在终端中时,您将看到一条消息:

Revealed type is 'builtins.list[script.MyType*]'

关于 reveal_type here.

的文档

顺便说一下,您的代码有一个小问题,应该是 List[X] 而不是 List(X)

PyCharm 也会识别类型。 bars. 将为列表方法提供自动完成选项,bars[0]. 将为 MyType.

提供选项