如何在python中找回枚举元素的名称?

Mik*_*ike 22 python enums

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

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

Status = enum(
       STATUS_OK=0,
       STATUS_ERR_NULL_POINTER=1, 
       STATUS_ERR_INVALID_PARAMETER=2)
Run Code Online (Sandbox Code Playgroud)

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

>>> cur_status = get_Status()
>>> print(cur_status)
1
Run Code Online (Sandbox Code Playgroud)

我想得到STATUS_ERR_NULL_POINTER,而不是1

Mar*_*ers 28

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

name = next(name for name, value in vars(Status).items() if value == 1)
Run Code Online (Sandbox Code Playgroud)

生成器表达式遍历属性及其值(从vars()函数生成的字典中获取)然后返回与值匹配的第一个属性1.

枚举更好地由enum建模,在Python 3.4中可用或作为早期版本后端:

from enum import Enum

class Status(Enum):
    STATUS_OK = 0
    STATUS_ERR_NULL_POINTER = 1 
    STATUS_ERR_INVALID_PARAMETER = 2
Run Code Online (Sandbox Code Playgroud)

让您访问名称和值:

name = Status(1).name  # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value  # gives 1
Run Code Online (Sandbox Code Playgroud)


ger*_*rdw 8

2021 年更新:这些答案已过时。使用 Python 的标准 Enum 类,

cur_status.name
Run Code Online (Sandbox Code Playgroud)

将返回名称。(STATUS_ERR_NULL_POINTER)

要查找知道名称的枚举:

s = Status['STATUS_ERR_NULL_POINTER']
Run Code Online (Sandbox Code Playgroud)

  • 问题不在于Python的“Enum”,而是OP创建的一个。 (2认同)
  • OP应该使用Python的枚举:) (2认同)