【发布时间】:2017-06-26 11:37:51
【问题描述】:
我有一些 Python 源代码,想找出变量的类型。例如给定字符串
"""
greeting = "Hello"
"""
我想要get_type('greeting') == str。或者更复杂的例子:
"""
def test(input: str):
output = len(input)
return str
"""
在伪代码中,我希望能够执行以下操作:
>>> m = parse_module()
>>> m.functions['test'].locals['output'].get_type()
int
在 Python 3 中使用类型注释和 MyPy 似乎应该可以做到这一点,但我不知道怎么做。像 VS code 这样的 IDE 已经变得非常擅长猜测 python 代码中的类型,这就是为什么我猜测肯定有一种公开的方式来做到这一点。
似乎有一个模块typed-ast,它也被 MyPy 使用,这让我在其中获得了一部分。但是,这并没有类型推断或传播,它只是给了我据我所知的显式注释。 MyPy 作为 api,但它只允许您运行检查器,并返回与命令行工具相同的错误消息。我正在寻找一种方法来“接触”MyPy,并获取一些推断的信息 - 或者一些我没有想到的替代解决方案。
【问题讨论】:
-
您也许可以使用
inspect模块。它是一个 Python 内省助手。 -
我很困惑,你不能只使用
type()函数吗? -
我将代码作为字符串,我不想执行它。我想获取源代码中包含的变量的类型。
标签: python type-inference mypy