python 3:用mypy类型推理?

时间:2018-04-25 10:12:33

标签: python python-3.x type-inference typing 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]吗?

如果不能,那么我最好的选择是什么?任何想要推荐的想法/包裹?

1 个答案:

答案 0 :(得分:2)

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

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提供选项。