このように定義された列挙型があります:
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
クラス属性をループして、一致する名前を見つける必要があります。
_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
_