2014-09-22 52 views
24

我使用的回迁枚举功能从蟒蛇3.4与Python 2.7:迭代蟒蛇的枚举定义为了

> python --version 
Python 2.7.6 
> pip install enum34 
# Installs version 1.0... 

根据蟒蛇3(https://docs.python.org/3/library/enum.html#creating-an-enum)的文档枚举“枚举支持迭代,在定义顺序“中。然而,迭代不是为了发生对我来说:

>>> from enum import Enum 
>>> class Shake(Enum): 
...  vanilla = 7 
...  chocolate = 4 
...  cookies = 9 
...  mint = 3 
...  
>>> for s in Shake: 
...  print(s) 
...  
Shake.mint 
Shake.chocolate 
Shake.vanilla 
Shake.cookies 

我误解的东西,或者是迭代的定义为了以防不枚举的反向移植版本支持了吗?假设后者,是否有一种简单的方法来迫使它按顺序发生?

回答

35

我在这里找到答案:https://pypi.python.org/pypi/enum34/1.0

对于Python < 3.0,你需要指定一个__order__属性:

>>> from enum import Enum 
>>> class Shake(Enum): 
...  __order__ = 'vanilla chocolate cookies mint' 
...  vanilla = 7 
...  chocolate = 4 
...  cookies = 9 
...  mint = 3 
...  
>>> for s in Shake: 
...  print(s) 
...  
Shake.vanilla 
Shake.chocolate 
Shake.cookies 
Shake.mint 
+4

哇它是如此有用它们如何使事情不兼容向后黑/白2和Python 3中!非常酷的事情是它是不可预测的。这让我们脚踏实地! – neuronet 2016-04-28 02:24:20

+0

供参考:链接不再去相关的信息。 :( – Pod 2016-10-17 14:15:41

+0

我更新了文档链接。 – Troy 2017-03-08 15:16:28