Lo que veo más a menudo es esto, en el contexto del módulo de nivel superior:
FOO_BAR = 'FOO_BAR'
FOO_BAZ = 'FOO_BAZ'
FOO_QUX = 'FOO_QUX'
... y después ...
if something is FOO_BAR: pass # do something here
elif something is FOO_BAZ: pass # do something else
elif something is FOO_QUX: pass # do something else
else: raise Exception('Invalid value for something')
Tenga en cuenta que el uso de la is
en lugar de ==
está tomando un riesgo aquí - se supone que la gente está usando your_module.FOO_BAR
en lugar de la cadena 'FOO_BAR'
(que normalmente se intercalará de manera que is
coincidirá, pero que ciertamente no se puede contar), y por lo tanto puede no ser apropiado dependiendo del contexto.
Una de las ventajas de hacerlo de esta manera es que al buscar en cualquier parte una referencia a esa cadena que se está almacenando, es inmediatamente obvio de dónde vino; FOO_BAZ
es mucho menos ambiguo que 2
.
Además de eso, la otra cosa que ofende a mi sensibilidad Pythonic es que la clase que propone es el uso de split()
. ¿Por qué no simplemente pasar una tupla, lista u otro enumerable para empezar?
duplicados de http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python –
acuerdo. Lo siento, debería haberlo encontrado antes. – Lanny