Skip to content

Instantly share code, notes, and snippets.

@jossef
Created February 19, 2015 09:55
Show Gist options
  • Select an option

  • Save jossef/37bfa2c5830405e13497 to your computer and use it in GitHub Desktop.

Select an option

Save jossef/37bfa2c5830405e13497 to your computer and use it in GitHub Desktop.
C#/Java style Enum with names in Python 2.7+
from abc import ABCMeta, abstractmethod
import inspect
class BaseEnum(object):
__metaclass__ = ABCMeta
def __init__(self):
self._names = dict()
self._names_reversed = dict()
self.init_enum()
def get_name(self, id):
name = self._names.get(id, None)
return name
def get_id(self, name):
id = self._names_reversed.get(name, None)
return id
def define(self, id, name):
self._names[id] = name
self._names_reversed[name] = id
return id
@abstractmethod
def init_enum(self):
pass
class StateEnum(BaseEnum):
def init_enum(self):
self.unknown = self.define(0, 'Unknown')
self.known = self.define(1, 'Known')
class TypeEnum(BaseEnum):
def init_enum(self):
self.car = self.define(0, 'Car')
self.plane = self.define(1, 'Plane')
State = StateEnum()
Type = TypeEnum()
#!/usr/bin/env python
from enums import State, Type
print State.unknown
print State.get_id(State.get_name(State.unknown))
print Type.car
print State.get_name(Type.car)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment