gpt4 book ai didi

python - python2.7 中最少的非官方​​枚举支持 - flufl.enum 或 enum34?

转载 作者:太空狗 更新时间:2023-10-29 21:34:36 30 4
gpt4 key购买 nike

从没想过我需要这样做,但在这里我打算在 python 2.7 中使用枚举。

有 Barry 的 flufl.enum PEP 435 说“......是这个 PEP 最初基于的引用实现”。

但是还有一个backport enum34在 pypi 上。

这两个看起来都是半官方的,那么我应该在新代码中使用哪个呢?

“应该有一种明显的方法来做到这一点”,但这是一个很难用谷歌搜索的话题,因为那里有数十种(数百种?)手动实现。而 python 3.4 enum 仍然只是一个候选版本。

我已经尝试了 flufl.enum.Enumenum34.Enum,行为完全不同——最显着的是 __getitem__ 的不同语义。根据这个comment Martijn Pieters 指出,向后移植具有挑战性,因为实现依赖于元类上的新 __prepare__ 函数。我读过 this发布和 PEP完整地。

最佳答案

enum34 匹配 Python3.4 中的内容, 所以这就是要使用的。

backport 和 3.4 之间的一大区别:

  • 在 Python 2 中,您无法获得定义顺序(因为 __prepare__ 尚不存在),但有一个解决方法——定义 _order_ 它将是Python 2 中的“定义顺序”(它在 Python 3 中被忽略)。如果您不使用解决方法,则使用的顺序是成员的值,按升序排列。

更新

  • 首选拼写现在是 _order_(单下划线而不是双下划线)

  • Python3.6+ 将检查 _order_ 是否与实际顺序匹配(对于保持 Python 2/3 代码同步很有用)


1 披露:我是 Python stdlib Enum 的作者, enum34 backport, 和 Advanced Enumeration (aenum)图书馆。

关于python - python2.7 中最少的非官方​​枚举支持 - flufl.enum 或 enum34?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709300/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com