我的最终目标实际上是在我的 Enum 类中创建一个辅助方法,它总是返回一个 Enum 成员并且从不引发异常,给定任何可能的值,例如
Color.from_value('red')
如果值不是枚举的一部分,辅助方法将返回一个默认值,比如 Color.UNKNOWN
。
基于此answer from another related question ,我可以通过一些内置成员列出它们来检查值。但是,我接下来要做的是跟踪内部成员中的所有值,这样我就不必在每次调用辅助方法时都遍历这些值。我尝试做类似以下的事情:
class Color(Enum):
RED = 'red'
BLUE = 'blue'
GREEN = 'green'
# this doesn't work
_values = [item.value for item in Color]
正如预期的那样,它不起作用。这可能是 Python 枚举中已经内置的东西吗?
最佳答案
您可以创建方法并检查类中的值:
import enum
class Color(enum.Enum):
RED = 'red'
BLUE = 'blue'
GREEN = 'green'
UNKNOWN = "unknown"
@classmethod
def from_value(cls, value):
try:
return {item.value: item for item in cls}[value]
except KeyError:
return cls.UNKNOWN
print(Color.from_value("hey"))
print(Color.from_value("red"))
结果:
Color.UNKNOWN
Color.RED
这里有一个 live example
如果你不想重申,你总是可以有值的外部缓存:
class Color(enum.Enum):
RED = 'red'
BLUE = 'blue'
GREEN = 'green'
UNKNOWN = "unknown"
@classmethod
def from_value(cls, value):
try:
return _COLORITEMS[value]
except KeyError:
return cls.UNKNOWN
_COLORITEMS = {item.value: item for item in Color}
关于python - 我如何在内部跟踪 Python 枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041173/