给出python 3中的以下片段
def foo() -> List[X]: pass
class X:
def bar(self) -> MYTYPE: pass
表示以下表达式:
[x.bar() for x in foo()]
我可以利用mypy
包正确解析上面表达式的AST并猜测结果的类型是List[MYTYPE]
吗?
如果不能,那么我最好的选择是什么?任何想要推荐的想法/包裹?
答案 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
提供选项。