martedì 19 marzo 2013

python ed enum

Stavolta la faccio breve, mi capita ogni tanto di dovere ricorrere ad un tipo che ricordi gli enum del C con l'associazione numerica delle chiavi, una versione basica (dove gli indici sono progressivi senza poterne settare i valori) potrebbe essere:

class Enum():
    def __init__(self, a_list):
        self.a_list = a_list

    def __getattr__(self, name):
        if name in self.a_list:
            return self.a_list.index(name)
        raise AttributeError

l'uso è assai semplice:

Colors = Enum(['red', 'white', 'green', 'orange'])
print Colors.white # 1 :-)

Nessun commento: