我想在我的开源库中支持新的 Python 特性。 Python 的新类型提示使用户更容易使用我的软件。
但它有一个障碍 - 它依赖于一个名为 typing
的库来获取一些更有趣的类型注释。该库在 Python < 3.5 中不存在。
通常我会使用兼容性库(例如 six
)来处理这个问题,但是 six
中尚不支持 typing
模块.
另一个可接受的解决方案可能是类似 3to2
的转换器,它可以去除不支持的功能。不幸的是,我还没有看到 3.5 到 3.(x<5) 的转换器。
似乎现在唯一可用的替代方法是将我所有的 typedef 导入包装到 try block 中,并为该语言的旧版本提供一个伪造的 typedef。这很丑陋,而且不是我想要的项目处理方式。
有什么建议吗?
最佳答案
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反而;这些实际上并没有执行,只有静态分析工具需要能够解析这些。您仍然会为这些“导入”typing
模块,但该模块从未真正加载,也不需要为 stub 文件安装。 stub 文件具有 .pyi
扩展名并位于它们的 .py
对应文件旁边,但包含完整注释,但没有函数体(您应该使用 .. .
省略号改为文字)。
你可以看看 Mypy stub specifications这在实践中是如何工作的; Python 类型提示 PEP 在很大程度上受到 Mypy 等工具的启发。
关于python - 是否有使带有类型注释的 Python 3.5 代码向后兼容的策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323433/