python如何获取枚举的名称

时间:2017-06-08 23:14:38

标签: python python-2.7 enums

我有这样的枚举

class testEnum(Enum):
   Code_1 = "successful response"
   Code_2 = "failure response"

然后我有一个方法,它将枚举键名Code_1和枚举键值successful response作为输入。

如果我发送testEnum.Code_1,则会解析为successful response而不是Code_1

我在线查看了一些建议使用testEnum.Code_1.name的文档,但是这会引发一个错误,即enum项目不存在“name”。

有谁知道如何获取枚举密钥的名称?

4 个答案:

答案 0 :(得分:6)

我怀疑发生了什么事情是你正在使用名为enum的过时的可安装pip的库。如果你这样做了,你会得到像

这样的东西
>>> from enum import Enum
>>> class testEnum(Enum):
...    Code_1 = "successful response"
...    Code_2 = "failure response"
... 
>>> testEnum.Code_1
'successful response'
>>> testEnum.Code_1.name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'name'

而使用“真实”枚举(如果你使用现代Python,则标准库中为enum;如果不是,则为enum34 backport,你会看到

>>> from enum import Enum
>>> class testEnum(Enum):
...    Code_1 = "successful response"
...    Code_2 = "failure response"
... 
>>> testEnum.Code_1
<testEnum.Code_1: 'successful response'>
>>> testEnum.Code_1.name
'Code_1'

您可以通过键入help(enum)并查看是否看到“NAME / enum / MODULE REFERENCE / https://docs.python.org/3.6/library/enum”(您应该)或“NAME / enum - 强大的枚举类型支持”来单独确认在Python中“如果你使用旧版本。

答案 1 :(得分:2)

您可以使用对象附带的__dict__开始调查。

有趣的阅读
print(testEnum.__dict__)

在那个词典中你会看到一个好的开始,你可以用以下方法测试:

print(testEnum._member_names_)

确实产生了

['Code_1', 'Code_2']

答案 2 :(得分:1)

dir(testEnum)会给你字典键。

e.g。

dir(testEnum)

返回:

[&#39; Code_1&#39 ;,  &#39; CODE_2&#39 ;,  &#39;的&#39 ;,  &#39;的 delattr &#39 ;,  &#39;的字典&#39 ;,  &#39;的 DIR &#39 ;,  &#39;的文档&#39 ;,  &#39;的当量&#39 ;,  &#39;的格式&#39 ;,  &#39;的 GE &#39 ;,  &#39;的的getAttribute &#39 ;,  &#39;的 GT &#39 ;,  &#39;的散列&#39 ;,  &#39;的初始化&#39 ;,  &#39;的 init_subclass &#39 ;,  &#39;的文件&#39 ;,  &#39;的 LT &#39 ;,  &#39;的模块&#39 ;,  &#39;的 NE &#39 ;,  &#39; &#39 ;,  &#39;的减少&#39 ;,  &#39;的 reduce_ex &#39 ;,  &#39;的再版&#39 ;,  &#39;的 SETATTR &#39 ;,  &#39;的的sizeof &#39 ;,  &#39;的 STR &#39 ;,  &#39;的 subclasshook &#39 ;,  &#39;的 weakref &#39;]

答案 3 :(得分:1)

在python3.9中可以使用:

testEnum.__members__