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

wim*_*wim 7 python enums python-2.7

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

有一个巴里的flufl.enum,PEP 435说"......是这个PEP最初的参考实施".

但是pypi上还有一个backport enum34.

这些看起来都是半官方的,所以我应该在新代码中使用哪一个?

"应该有一种明显的方法可以做到这一点",但这对谷歌来说是个难题,因为那里有数十(数百?)手动实施.而python 3.4枚举仍然只是一个候选版本.

我已经尝试了两种flufl.enum.Enumenum34.Enum和行为是完全不同的-最显着的不同语义__getitem__.根据Martijn Pieters的评论,backport很有挑战性,因为实现依赖于__prepare__元类的新功能.我已经完整阅读了这篇文章和PEP.

Eth*_*man 10

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

backport和3.4之间的一个很大的区别:

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

更新

  • 现在首选拼写_order_(单个而不是双前导和尾随下划线)

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


1披露:我是Python stdlibEnum,enum34backportAdvanced Enumeration(aenum) 库的作者.