2014-09-22 3 views
24

Я использую портированную функциональность Enum из Python 3.4 с Python 2.7:Итерация Python Enum с целью определения

> 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 

Am Я-то недоразумение, или итерации в порядке определения просто не поддерживается в портированном версиях Перечисления еще? Предполагая последнего, есть ли простой способ заставить его произойти по порядку?

ответ

35

Я нашел ответ здесь: https://pypi.python.org/pypi/enum34/1.0.

Для питона < 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

Wow это так полезно, как они делают вещи назад несовместимые/б 2 и 3 в Python! Действительно здорово, что это непредсказуемо. Это держит нас на ногах! – neuronet

+0

FYI: Ссылка больше не подходит к соответствующей информации. :( – Pod

+0

Я обновил ссылку на документацию. – Troy

Смежные вопросы