Я хотел бы создать класс Enum в python. Мне нужен также метод get_str(), например:Класс enum в python
class Operation (object):
START = 0
STOP = 1
(...)
def get_str(self):
operation_dispatcher = {
Operation.START: "start",
Operation.STOP: "stop",
(...)
}
return operation_dispatcher[self]
Но, к сожалению, этот подход не работает. Объекты являются ints, и я получил сообщение об ошибке, что объект «int» не имеет атрибута get_str ... У вас есть идея, как реализовать эту функциональность?
Я пытался сделать что-то вроде:
Operation.get_str (operation_reference), а также operation_reference.get_str()
UPDATE:
class EnumMeta(type):
def __getattribute__(self, name):
return self(super(EnumMeta, self).__getattribute__(name))
class Enum(object):
__metaclass__ = EnumMeta
def __init__(self, value):
super(Enum, self).__init__()
self.value = value[0]
self.repr = value[1]
def __eq__(self, other):
if isinstance(other, Enum):
return self.value == other.value
elif isinstance(other, int):
return self.value == other
else:
return object.__eq__(Enum, other)
def __repr__(self):
return str(self.repr)
class Operation(Enum):
START = (0, "start")
STOP = (1, "stop")
(...)
operation_dispatcher = {
Operation.START: start_method,
Operation.STOP: stop_method,
(...) }
# invoking
operation_dispatcher[Operation.START.value]()
Просто, чтобы вы знали: Если вы используете Python 3.4, вы заново изобретать колесо. https://docs.python.org/3/library/enum.html –
См. ['enum34'] (https://pypi.python.org/pypi/enum34) при использовании python 2. – juanchopanza