我有这样的枚举
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”。
有谁知道如何获取枚举密钥的名称?
答案 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__