我想在我的开源库中支持新的Python功能。 Python的新类型提示使用户更容易使用我的软件。
但它带来了一个障碍 - 它依赖于一个名为typing
的库来获取一些更有趣的类型注释。那个库并不存在于Python< 3.5。
通常情况下,我会使用兼容性库(例如six
)处理该问题,但是typing
尚未支持six
模块。
另一个可接受的解决方案可能是3to2
转换器,它可以剥离不支持的功能。不幸的是,我还没有看到3.5到3.(x <5)的转换器。
现在唯一可用的替代方法是将我的所有typedef导入包装到try-blocks中,并为该语言的旧版本提供假的typedef。这很丑陋,而不是我想采取我的项目的方式。
有什么建议吗?
答案 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等工具的启发。