Enum questions.

Rustom Mody rustompmody at gmail.com
Wed Apr 13 08:33:00 EDT 2016


On Wednesday, April 13, 2016 at 5:39:13 PM UTC+5:30, Michael Selik wrote:
> On Wed, Apr 13, 2016, 12:14 PM Antoon Pardon
> wrote:
> 
> > I have been looking at the enum documentation and it
> > seems enums are missing two features I rather find
> > important.
> >
> > 1) Given an Enum value, someway to get the next/previous
> >    one
> >
> > 2) Given two Enum values, iterate over the values between
> >    them.
> >
> > Did I miss those in the documentation or are they really
> > missing?
> >
> 
> An Enum corresponds to "nominal" data that is coded as a number simply for
> storage rather than meaning. If you want next/previous you are thinking of
> "ordinal" data which is coded as numbers for the purpose of comparison (but
> not arithmetic). Placing nominal data in order would be comparing apples
> and oranges, so to speak.
> 
> However, IntEnum should give you the features you want.
> 
> https://docs.python.org/3/library/enum.html#intenum
> 
> >

from enum import Enum
# General (not contiguous) enum
class Color(Enum):
    red = 10
    blue = 20
    green = 30


>>> Color.__members__
OrderedDict([('red', <Color.red: 1>), ('blue', <Color.blue: 2>), ('green', <Color.green: 3>)])

>>> set(Color.__members__)
set(['blue', 'green', 'red'])

>>> {n:Color[n] for n in set(Color.__members__)}
{'blue': <Color.blue: 20>, 'green': <Color.green: 30>, 'red': <Color.red: 10>}
>>> 



More information about the Python-list mailing list