【问题标题】:Is there a strategy for making Python 3.5 code with type-annotations backwards compatible?是否有使带有类型注释的 Python 3.5 代码向后兼容的策略?
【发布时间】:2016-01-24 05:38:36
【问题描述】:

我想在我的开源库中支持新的 Python 功能。 Python 的新类型提示使用户可以更轻松地使用我的软件。

但它有一个障碍——它依赖于一个名为 typing 的库来获取一些更有趣的类型注释。 Python

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

另一个可接受的解决方案可能是类似于3to2 转换器,它可以去除不支持的功能。不幸的是,我还没有看到 3.5 到 3.(x

似乎目前唯一可用的选择是将我所有的 typedef 导入包装到 try 块中,并为旧版本的语言提供一个假的 typedef。这很丑陋,而且不是我想要的项目。

有什么建议吗?

【问题讨论】:

  • Google 没有提供任何此类库,但有 一个 typing 模块。这就是你在说的吗?因为there's a version of that for Python <3.5.
  • 抱歉,您是对的 - 您是否建议将其添加为 python 的安装时依赖项
  • 那个,否则你必须在不使用typing或不支持Python
  • 嗯,这就是问题的前提:我想使用新功能,我想让它支持旧版本。使用 backport 是一种可接受的解决方案,因为我可以选择性地安装它。

标签: python type-hinting python-3.5


【解决方案1】:

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 模块,但该模块从未实际加载,也不需要为存根文件安装它。存根文件具有 .pyi 扩展名,并位于它们的 .py 对应文件旁边,但包含完整注释,但没有函数体(您应该使用 ... 省略号文字代替)。

您可以查看Mypy stub specifications,了解这将如何在实践中发挥作用; Python 类型提示 PEP 很大程度上受 Mypy 等工具的启发。

【讨论】:

猜你喜欢
  • 2018-10-18
  • 2017-11-20
  • 2016-01-02
  • 1970-01-01
  • 2015-08-10
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
相关资源
最近更新 更多