是否存在使Python 3.5代码向后兼容类型注释的策略?

时间:2015-10-24 21:14:38

标签: python type-hinting python-3.5

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

但它带来了一个障碍 - 它依赖于一个名为typing的库来获取一些更有趣的类型注释。那个库并不存在于Python< 3.5。

通常情况下,我会使用兼容性库(例如six)处理该问题,但是typing尚未支持six模块。

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

现在唯一可用的替代方法是将我的所有typedef导入包装到try-blocks中,并为该语言的旧版本提供假的typedef。这很丑陋,而不是我想采取我的项目的方式。

有什么建议吗?

1 个答案:

答案 0 :(得分:5)

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

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

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

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

对于Python 2.x,您可以使用stub files代替;这些实际上并没有执行,只有静态分析工具需要能够解析这些。你还在进口&#39;这些的typing模块,但模块从未实际加载,也不需要为存根文件安装。存根文件具有.pyi扩展名并且位于其.py对应文件旁边,但包含完整注释,但不包含函数体(您应该使用...省略号文字)。

你可以看一下Mypy stub specifications这个如何在实践中发挥作用; Python类型暗示PEP很大程度上受到Mypy等工具的启发。