python - 是否有使带有类型注释的 Python 3.5 代码向后兼容的策略?

标签 python type-hinting python-3.5

我想在我的开源库中支持新的 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/

相关文章:

python - 1.10 中关于 django.shortcuts.render() 方法签名的困惑

python - Pylance:在这种情况下不允许使用 "ClassVar"?

youtube - 使用 pytube 从 YouTube 下载音频

python - 测试函数或方法是正常还是异步

python - Python 中的变异/就地函数调用或改编

python - 尝试更改 pandas 数据帧中的索引值时出错(IndexError : too many indices for array)

python - 解析电子邮件字段

php - 如何在 php 7.1 中指示返回类型是当前子类型?

python - 如何在 Python 中调用方法后访问方法内部的类型提示

python - 打字。任何与对象?