按定义顺序迭代python枚举

时间:2014-09-22 19:58:39

标签: python python-2.7 enums

我使用python 3.4中的backported Enum功能和python 2.7:

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

根据python 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

我是否误解了某些内容,或者是在后向版本的Enums中不支持定义顺序的迭代?假设后者,是否有一种简单的方法可以按顺序强制它发生?

1 个答案:

答案 0 :(得分:59)

我在这里找到答案: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