python - 如何在不使用 try/catch 的情况下测试 Python Enum 中是否存在 int 值?

标签 python enums

使用 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/

相关文章:

c++ - 错误 : T does not name a type - For specialisation using strongly typed enums

c - 为什么直接比较两个枚举会出错?

Java Enum 访问私有(private)实例变量

python - '导入错误 : No module named pytz' when trying to import pylab?

python - 使用 Visual Studio 运行 CPython 应用程序?

python - 如何使用 cURL 通过 FTP 上传文件夹?

python - 从 Pandas 数据框中过滤数据

java - Java 不支持枚举上的协变返回类型吗?

Python - StatsModels,OLS 置信区间

postgresql - 如何在非英语语言中使用 GraphQL 枚举?邮寄的