python - 如何取回枚举元素的名称?

标签 python enums

我有一个这样定义的枚举:

def enum(**enums):
    return type('Enum', (), enums)

Status = enum(
       STATUS_OK=0,
       STATUS_ERR_NULL_POINTER=1, 
       STATUS_ERR_INVALID_PARAMETER=2)

我有一个以 Status 枚举形式返回状态的函数。 如何获取枚举值的名称,而不仅仅是值?

>>> cur_status = get_Status()
>>> print(cur_status)
1

我想获得 STATUS_ERR_NULL_POINTER,而不是 1

最佳答案

您必须遍历类属性才能找到匹配的名称:

name = next(name for name, value in vars(Status).items() if value == 1)

生成器表达式循环遍历属性及其值(取自 vars() function 生成的字典),然后返回与值 1 匹配的第一个。

enum library 更好地模拟枚举, 在 Python 3.4 中可用或作为 backport for earlier versions :

from enum import Enum

class Status(Enum):
    STATUS_OK = 0
    STATUS_ERR_NULL_POINTER = 1 
    STATUS_ERR_INVALID_PARAMETER = 2

允许您访问名称和值:

name = Status(1).name  # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value  # gives 1

关于python - 如何取回枚举元素的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29880323/

相关文章:

python - Pyapns 故障 500 : 'Connection to the APNS server could not be made

Python if 语句不起作用?

c - C 中的枚举和字符串

java - 如何在注释中使用不同的枚举类型?

struct - 我可以将元组结构枚举变体转换为常规元组而不是解构和重新创建元组吗?

sorting - 如何在Kotlin的枚举类中自定义排序

python - Python 字典中的键到值到键

用于编辑第一条评论的 Python 正则表达式

python - 如何使用 SCRAPY 向 API 发出 POST 请求

c# - 正确命名 C# 的枚举值