问题描述
我想在我的开源库中支持新的Python功能。 Python的新类型提示使用户更容易使用我的软件。
但它带来了一个障碍 - 它依赖于一个名为typing
的库,用于一些更有趣的类型注释。
Python <3.5中不存在该库。
通常我会使用兼容性库(例如six
)来处理它,但是现在还没有支持six
typing
模块。
另一个可接受的解决方案可能是3to2
转换器,它可以剥离不支持的功能。
不幸的是,我还没有看到3.5到3.(x <5)的转换器。
似乎现在唯一可用的替代方法是将我的所有typedef导入包装到try-blocks中,并为旧版本的语言提供假的typedef。 这很丑陋,而不是我想采取我的项目的方式。
有什么建议?
1楼
Python 3.5中的类型提示由两部分组成:
- 提示对象类型的库,称为
- 注释语法
两者都可以在早期的Python版本中使用,或者可以在尚未支持注释语法的地方使用。
该模块已经 。 所有Python 3版本都支持注释,从3.0开始,请参阅 。 这意味着类型提示代码可以适用于所有广泛使用的Python 3发行版。
对于Python 2.x,您可以使用 ;
这些实际上并没有执行,只有静态分析工具需要能够解析这些。
您仍然会“导入”这些typing
模块,但模块从未实际加载,也不需要为存根文件安装。
存根文件具有.pyi
扩展名并且.pyi
其.py
对应文件旁边,但包含完整注释,但没有函数体(您应该使用...
省略号文字)。
您可以查看 ,了解它在实践中的工作原理; Python类提示PEP很大程度上受到Mypy等工具的启发。