如何在 Python 运行时从存根文件 (.pyi) 获取类型注释?



我想获取函数或类方法的注释。如果类型提示写在源代码中,那么我可以通过获取属性__annotations__来获取类型。

def hoge(n: int): ...
print(hoge.__annotations__)  # {'n': <class 'int'>}

但是我不知道如何获取在存根文件(.pyi(中写入的类型。

# .pyi
def fuga(n: int): ...
# .py
def fuga(n): ...
print(fuga.__annotations__)  # {}

有什么很酷的方法吗?

来自 PEP-484:

存根文件是包含类型提示的文件,这些提示仅供类型检查器使用,而不是在运行时使用。存根文件有几种用例:

  • 扩展模块
  • 作者尚未添加类型提示的第三方模块
  • 尚未为其编写类型提示的标准库模块
  • 必须与 Python 2 和 3 兼容的模块
  • 将注释用于其他目的的模块

因此,不幸的是,无法获取注释,并且如何解释它们由类型检查器自行决定。这有一个副作用,即没有权威资源来验证您的类型提示是否正确。

最接近的是mypy.

最新更新