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
.
提供选项
给定 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
.