web-dev-qa-db-fra.com

Itérer python Enum dans l'ordre des définitions

J'utilise les fonctionnalités backported Enum de python 3.4 avec python 2.7:

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

D'après la documentation d'Enums dans python 3 ( https://docs.python.org/3/library/enum.html#creating-an-enum) ) , "Les énumérations prennent en charge l'itération, dans l'ordre de la définition ". Toutefois, l'itération ne se produit pas pour moi:

>>> 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

Est-ce que je comprends mal quelque chose ou l'itération dans l'ordre des définitions n'est-elle pas encore prise en charge dans les versions avec portage de Enums? En supposant que ce soit le cas, y a-t-il un moyen facile de le forcer dans l’ordre?

54
Troy

J'ai trouvé la réponse ici: https://pypi.python.org/pypi/enum34/1. .

Pour python <3.0, vous devez spécifier un attribut __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
66
Troy