首页 > 解决方案 > 是否有一种干净的方法可以将仅 Python 3 的功能添加到在 2.7 中使用其他功能的类?

问题描述

我正在用 Python 创建一个项目,我打算能够在 Python 2.7 和 Python 3 下运行。我创建了一个类,其中很明显在 Python 3 下使用一些 Python 3 特定的功能可以使用一个不错的功能. 我不相信我可以在 Python 2.7 中复制相同的功能,我也不想这样做。但我打算让 Python 3 应用程序因此可能具有一些额外的功能。

无论如何,我希望只要 2.7 应用程序从不调用使用 3.x 功能的函数,我就可以了。但是,不,因为代码的存在会在 2.7 中生成编译时错误,因此尽管函数从未在运行时被调用,但它会吐出虚拟变量。而且由于 Python 缺乏任何编译时保护,我不完全确定最好的解决方案是什么。

我想我可以创建一个 MyClass 的子类,将其命名为 MyClass3,将它放在另一个模块中并在那里添加额外的功能。但这使得很多事情变得更加糟糕......基于 sys.version_info 的更多拆分代码路径,循环包含问题,除非我做了很多文件拆分和......(挥手)。那样一团糟。但也许这是唯一可用的选择?

编辑:最初的问题提到了“yield from”,这就是下面的答案讨论它的原因。但最初的问题实际上并不是在寻找关于如何在 2.7 中获得“收益”的建议,但版主似乎认为这就是问题所在,并相应地将其标记为重复。

正如它发生的那样,正如我编辑问题以将其重点放在组织项目以避免编译错误(并删除对“yield from”的引用)的问题上,一个答案出现在引用了问题的产量并变成了超级有用。

标签: pythonpython-3.xpython-2.7

解决方案


yield from在以下模块中向后移植到 Python 2.7 yieldfrom:.

还有一个关于将功能实现yield from回 python 2的 SO 问题,您可能会发现它很有用,以及关于同一主题的博客文章。

AFAIK,该功能没有官方的反向移植,所以没有什么from __future__ import yieldfrom可以期待的(如果您不知道,请更正)。


推荐阅读