Znalazłem po prostu sposobem realizowania (siekać) enum w Pythonie:klasa Python Enum (z toString fromstring)
class MyEnum:
VAL1, VAL2, VAL3 = range(3)
mogę wtedy zadzwonić to jako takie:
bob = MyEnum.VAL1
Seksowny!
Dobra, teraz chcę móc uzyskać zarówno wartość liczbową, jeśli podano ciąg znaków, jak i ciąg znaków, jeśli podano wartość liczbową. Powiedzmy, że chcę struny dokładnie dopasować się do klucz Enum na
Najlepszym mogłem pomyśleć jest coś takiego:
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
czy coś takiego (ignorować jak Łapię nieprawidłowe przypadki)
Czy istnieje lepszy, bardziej skoncentrowany na pythonie sposób robienia tego, co robię powyżej? Czy też powyższe jest już tak zwięzłe, jak to tylko możliwe.
Wygląda na to, że jest lepszy sposób na zrobienie tego.
Ta ilość if/else zawsze oznacza, że jest to złe rozwiązanie;) –
możliwe duplikat [Jaki jest najlepszy sposób, aby wdrożyć 'enum' w Pythonie? ] (http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python) –
@Nick: możesz zmienić zaakceptowaną odpowiedź. –