3

我想在我的开源库中支持新的 Python 功能。Python 的新类型提示使用户更容易使用我的软件。

但它有一个障碍——它依赖于一个调用typing一些更有趣的类型注释的库。Python < 3.5 中不存在该库。

通常我会使用兼容性库(例如six)来处理这个问题,但是目前还不支持该typing模块six

另一个可接受的解决方案可能是类似于3to2可以剥离不受支持的功能的转换器。不幸的是,我还没有看到 3.5 到 3.(x<5) 的转换器。

似乎目前唯一可用的替代方法是将我所有的 typedef 导入包装到 try-blocks 中,并为旧版本的语言提供一个假的 typedef。这很丑陋,并不是我真正想要的方式来完成我的项目。

有什么建议么?

4

1 回答 1

5

Python 3.5 中的类型提示由两部分组成:

  • 类型提示对象库,称为typing
  • 注释语法

两者都可以在早期的 Python 版本中使用,或者可以在尚不支持注释语法的情况下使用。

该模块已向后移植到 Python 3.2 和更新版本。所有 Python 3 版本都支持注释,从 3.0 开始,请参阅PEP 3107。这意味着类型提示代码可以适用于所有广泛使用的 Python 3 发行版。

对于 Python 2.x,您可以改用存根文件;这些实际上并没有执行,只有静态分析工具需要能够解析这些。您仍然会typing为这些“导入”模块,但该模块从未实际加载过,也不需要为存根文件安装它。存根文件具有.pyi扩展名并位于其对应文件旁边.py,但包含完整的注释,但没有函数体(您应该使用...省略号文字代替)。

您可以查看Mypy 存根规范以了解其在实践中的工作方式;Python 类型提示 PEP 很大程度上受 Mypy 等工具的启发。

于 2015-10-24T21:28:00.333 回答