How to get back name of the enum element in python

2020-08-09 08:15发布

I have an enum defined like this:

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

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

I have a function that returns status as Status enum. How can I get the name of the enum value, and not just value?

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

I would like to get STATUS_ERR_NULL_POINTER, instead of 1

标签: python enums
2条回答
我欲成王,谁敢阻挡
2楼-- · 2020-08-09 08:49

You'd have to loop through the class attributes to find the matching name:

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

The generator expression loops over the attributes and their values (taken from the dictionary produced by the vars() function) then returns the first one that matches the value 1.

Enumerations are better modelled by the enum library, available in Python 3.4 or as a backport for earlier versions:

from enum import Enum

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

giving you access to the name and value:

name = Status(1).name  # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value  # gives 1
查看更多
何必那么认真
3楼-- · 2020-08-09 08:50

You don't need to loop through the Enum class but just access _member_map_.

>>> Status._member_map_['STATUS_OK']
<Status.STATUS_OK: 0>
查看更多
登录 后发表回答