【发布时间】:2010-12-17 17:01:32
【问题描述】:
我找到了一种在 Python 中实现(破解)枚举的简单方法:
class MyEnum:
VAL1, VAL2, VAL3 = range(3)
然后我可以这样称呼它:
bob = MyEnum.VAL1
性感!
好的,现在我希望能够获取给定字符串的数值,或者如果给定数值则获取字符串。假设我希望字符串与 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
或类似的东西(忽略我如何捕捉无效案例)
是否有更好、更以 python 为中心的方式来完成我上面所做的事情?还是上面已经尽可能简洁了。
似乎必须有更好的方法来做到这一点。
【问题讨论】:
-
这个 if/else 的数量总是表明这是一个错误的解决方案;)
-
@Nick:你可能想改变你接受的答案。