Я нашел простой способ реализовать (взломать) перечисление в Python:
class MyEnum:
VAL1, VAL2, VAL3 = range(3)
Затем я могу назвать это так:
bob = MyEnum.VAL1
Sexy!
Хорошо, теперь я хочу иметь возможность получить как числовое значение, если дана строка, так и строку, если дано числовое значение. Допустим, я хочу, чтобы строки точно совпадали с ключом Enum
Лучшее, что я мог придумать, это что-то вроде этого:
class MyEnum:
VAL1, VAL2, VAL3 = range(3)
@classmethod
def tostring(cls, val):
if (val == cls.VAL1):
return "VAL1"
elif (val == cls.VAL2):
return "VAL2"
elif (val == cls.VAL3):
return "VAL3"
else:
return None
@classmethod
def fromstring(cls, str):
if (str.upper() == "VAL1"):
return cls.VAL1
elif (str.upper() == "VAL2"):
return cls.VAL2
elif (str.upper() == "VAL2"):
return cls.VAL2
else:
return None
или что-то в этом роде (игнорируйте, как я ловлю недействительные случаи)
Есть ли лучший, более питоничный способ сделать то, что я делаю выше? Или вышеупомянутое уже настолько кратко, насколько это возможно.
Кажется, должен быть лучший способ сделать это.