我有一个这样定义的枚举:
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)
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)