使用 Python Enum 类,有没有办法在不使用 try/catch 的情况下测试 Enum 是否包含特定的 int 值?
使用以下类:
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
如何测试值 6(返回 true)或值 7(返回 false)?
最佳答案
测试值
变体 1
请注意,Enum
有一个名为 _value2member_map_
的成员(未记录在案,可能会在未来的 python 版本中更改/删除):
print(Fruit._value2member_map_)
# {4: <Fruit.Apple: 4>, 5: <Fruit.Orange: 5>, 6: <Fruit.Pear: 6>}
您可以针对此映射测试 Enum
中是否有值:
5 in Fruit._value2member_map_ # True
7 in Fruit._value2member_map_ # False
变体 2
如果您不想依赖此功能,这是一种替代方法:
values = [item.value for item in Fruit] # [4, 5, 6]
或(可能更好):使用 set
; in
操作符会更高效:
values = set(item.value for item in Fruit) # {4, 5, 6}
然后测试
5 in values # True
7 in values # False
将 has_value
添加到您的类(class)
然后您可以将其作为方法添加到您的类中:
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
@classmethod
def has_value(cls, value):
return value in cls._value2member_map_
print(Fruit.has_value(5)) # True
print(Fruit.has_value(7)) # False
按键测试
如果您想测试名称(而不是值),我会使用 _member_names_
:
'Apple' in Fruit._member_names_ # True
'Mango' in Fruit._member_names_ # False
关于python - 如何在不使用 try/catch 的情况下测试 Python Enum 中是否存在 int 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43634618/