On 01/09/2017 09:18 PM, Steven D'Aprano wrote:

The docs say that enums can be iterated over, but it isn't clear to me whether
they are iterated over in definition order or value order.

If I have:

class MarxBros(Enum):
     GROUCHO = 999
     CHICO = 5
     HARPO = 11
     ZEPPO = auto()
     GUMMO = -1

GROUCHO, CHICO, HARPO, ZEPPO, GUMMO = list(MarxBros)

In Python 3 it is always definition order.  In Python 2 (using the enum34 [1] 
backport), the order is either by value if possible, or alphabetical  if not -- 
unless you use the _order_ attribute to set it:

class MarkBros(Enum):
    _order_ = 'GROUCHO CHICO HARGPO ZEPPO GUMMO'
    GROUCHO = 999
    ...

On that related note, how would people feel about a method that injects enums
into the given namespace?

MarxBros._inject_(globals())

although maybe

from MarxBros import *

would be more familiar syntax :-)

Or you can do globals().update(MarxBros.__members__).

--
~Ethan~
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to