def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)
# Numbers.reverse_mapping['three'] == 'THREE'
有用set实现的:
class Enum(set):
def __getattr__(self, name):
if name in self:
return name
raise AttributeError
Animals = Enum(["DOG", "CAT", "HORSE"])
print Animals.DOG
有用range实现的:
dog, cat, rabbit = range(3)
# or
class Stationary:
(Pen, Pencil, Eraser) = range(0, 3)
print Stationary.Pen
有用tuple实现的:
class Enum(tuple): __getattr__ = tuple.index
State = Enum(['Unclaimed', 'Claimed'])
print State.Claimed