wim*_*wim 7 python enums python-2.7
从来没有想过我需要这样做,但在这里我打算在python 2.7中使用枚举.
有一个巴里的flufl.enum,PEP 435说"......是这个PEP最初的参考实施".
但是pypi上还有一个backport enum34.
这些看起来都是半官方的,所以我应该在新代码中使用哪一个?
"应该有一种明显的方法可以做到这一点",但这对谷歌来说是个难题,因为那里有数十(数百?)手动实施.而python 3.4枚举仍然只是一个候选版本.
我已经尝试了两种flufl.enum.Enum与enum34.Enum和行为是完全不同的-最显着的不同语义__getitem__.根据Martijn Pieters的评论,backport很有挑战性,因为实现依赖于__prepare__元类的新功能.我已经完整阅读了这篇文章和PEP.
Eth*_*man 10
enum34
匹配Python3.4中的内容,这就是要使用的内容.
backport和3.4之间的一个很大的区别:
__prepare__尚不存在),但是有一个解决方法 - 定义_order_,它将是Python 2中的"定义顺序"(它在Python 3中被忽略).如果不使用变通方法,则使用的顺序是成员的值,按升序排列.更新
现在首选拼写_order_(单个而不是双前导和尾随下划线)
Python3.6 +将检查是否_order_与实际顺序匹配(对于保持Python 2/3代码同步很有用)
1披露:我是Python stdlibEnum,enum34backport
和Advanced Enumeration(aenum) 库的作者.