Python/enum
< Python
enum — Support for enumerations
Python 3: enum — Support for enumerations https://docs.python.org/3/library/enum.html
from enum import Enum
# class syntax
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# functional syntax
Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])
Convert string name or value to enum:
def value_to_enum(color_value_str):
try:
return Color(color_value_str)
except ValueError:
return None
def name_to_enum(color_name_str):
try:
return return Color[color_name_str]
except KeyError:
return None
---
Python 2: [1]
class Enum(set):
""" Basic enumerated type
Example
>>> Animals = phi.Enum(["DOG", "CAT", "HORSE"])
>>> Animals.DOG
'DOG'
>>> 'HORSE' in Animals
True
"""
def __getattr__(self, name):
if name in self:
return name
raise AttributeError("Missing Enum property: %s" % name)
def __setattr__(self, name, value): # this makes it read-only
raise AttributeError("Unable to modify Enum property: %s (%s)" % (name, value))
Animals = Enum(["DOG", "CAT", "HORSE"])
print(Animals.DOG) # 'DOG'
Alternative:
class Stationery:
Pen, Pencil, Eraser = range(0, 3)
One liner:
class Enum(tuple): __getattr__ = tuple.index
>>> State = Enum(['Unclaimed', 'Claimed'])
>>> State.Claimed
1
>>> State[1]
'Claimed'
>>> State
('Unclaimed', 'Claimed')
>>> range(len(State))
[0, 1]
>>> [(k, State[k]) for k in range(len(State))]
[(0, 'Unclaimed'), (1, 'Claimed')]
>>> [(k, getattr(State, k)) for k in State]
[('Unclaimed', 0), ('Claimed', 1)]
Python 3 supports enum natively with the enum.Enum library: