是否有一种策略可以使具有类型注释的Python 3.5代码向后兼容?

Sal*_*ley 3 python type-hinting python-3.5

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

但是它带有一个障碍-它依赖于一个typing需要一些更有趣的类型注释的库。该库在Python <3.5中不存在。

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

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

看来,目前唯一可用的替代方法是将我所有的typedef导入包装到try块中,并为该语言的旧版本提供伪造的typedef。这很丑陋,而不是我想要承担我的项目的方式。

有什么建议么?

Mar*_*ers 5

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

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

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

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

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

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