2015-04-26 12 views
9

Mam enum zdefiniowane tak:Jak uzyskać nazwę elementu enum w python?

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

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

Mam funkcji, która zwraca status Status wyliczenia. Jak mogę uzyskać nazwę wartości wyliczeniowej, a nie tylko wartość?

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

Chciałbym dostać STATUS_ERR_NULL_POINTER zamiast 1

Odpowiedz

11

Trzeba pętli klasy atrybutów znaleźć pasującej nazwy:

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

Wyrażenie generator pętle nad atrybuty i ich wartości (wzięte ze słownika wyprodukowanego przez vars() function), a następnie zwracają pierwszą wartość, która odpowiada wartości 1.

Wyliczenia są lepiej modelowane przez enum library, dostępna w Pythonie 3.4 lub jako backport for earlier versions:

from enum import Enum 

class Status(Enum): 
    STATUS_OK = 0 
    STATUS_ERR_NULL_POINTER = 1 
    STATUS_ERR_INVALID_PARAMETER = 2 

dając dostęp do nazwy i wartości:

name = Status(1).name # gives 'STATUS_ERR_NULL_POINTER' 
value = Status.STATUS_ERR_NULL_POINTER # gives 1 
+0

działa jak czar. Dzięki! – Mike

Powiązane problemy