web-dev-qa-db-ja.com

Pythonでenum要素の名前を取得する方法は?

このように定義された列挙型があります:

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

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

ステータスをStatus enumとして返す関数があります。値だけでなく、列挙値の名前を取得するにはどうすればよいですか?

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

STATUS_ERR_NULL_POINTER、 の代わりに 1

21
Mike

クラス属性をループして、一致する名前を見つける必要があります。

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

ジェネレーター式は、属性とその値( vars() function によって生成されたディクショナリーから取得)をループし、最初のものを返します値_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
_

名前と値にアクセスできます:

_name = Status(1).name  # gives 'STATUS_ERR_NULL_POINTER'
value = Status.STATUS_ERR_NULL_POINTER.value  # gives 1
_
26
Martijn Pieters