簡體   English   中英

python如何獲取枚舉的名稱

[英]python how to get name of the enum

我有一個這樣的枚舉

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 的pip-installable 庫。 如果你這樣做了,你會得到類似的東西

>>> 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 中強大的枚舉類型支持”,如果您使用的是較舊的。

您可以使用對象附帶的__dict__開始調查。 有趣的閱​​讀是發現

print(testEnum.__dict__)

在該 dict 中,您將看到一個良好的開端,您可以使用以下內容進行測試:

print(testEnum._member_names_)

這確實會產生

['Code_1', 'Code_2']

dir(testEnum) 會給你字典鍵。

例如

dir(testEnum)

返回:

['Code_1'、'Code_2'、' class '、' delattr '、' dict '、' dir '、' doc '、' eq '、' format '、' ge '、' getattribute '、' gt '、' hash '、' init '、' init_subclass '、' le '、' lt '、' module '、' ne '、' new '、' reduce '、' reduce_ex '、' repr '、' setattr '、' sizeof ' , ' str ', ' subclasshook ', ' weakref ']

在python3.9中可以使用:

testEnum.__members__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM