not - python enumerate
¿Cuál es la práctica común para las enumeraciones en Python? (4)
He visto este patrón varias veces:
>>> class Enumeration(object):
def __init__(self, names): # or *names, with no .split()
for number, name in enumerate(names.split()):
setattr(self, name, number)
>>> foo = Enumeration("bar baz quux")
>>> foo.quux
2
También puede usar miembros de la clase, aunque deberá proporcionar su propia numeración:
>>> class Foo(object):
bar = 0
baz = 1
quux = 2
>>> Foo.quux
2
Si está buscando algo más sólido (valores dispersos, excepción enum específica, etc.), pruebe esta receta .
Posible duplicado:
¿Cómo puedo representar una ''enumeración'' en Python?
¿Cuál es la práctica común para las enumeraciones en Python? Es decir, ¿cómo se replican en Python?
public enum Materials
{
Shaded,
Shiny,
Transparent,
Matte
}
No tengo idea de por qué los Enums no son compatibles de forma nativa con Python. La mejor forma que he encontrado para emularlos es anulando _ str _ y _ eq _ para que pueda compararlos y cuando use print () obtendrá la cadena en lugar del valor numérico.
class enumSeason():
Spring = 0
Summer = 1
Fall = 2
Winter = 3
def __init__(self, Type):
self.value = Type
def __str__(self):
if self.value == enumSeason.Spring:
return ''Spring''
if self.value == enumSeason.Summer:
return ''Summer''
if self.value == enumSeason.Fall:
return ''Fall''
if self.value == enumSeason.Winter:
return ''Winter''
def __eq__(self,y):
return self.value==y.value
Uso:
>>> s = enumSeason(enumSeason.Spring)
>>> print(s)
Spring
Probablemente puedas usar una estructura de herencia aunque cuanto más jugué con esto, más sucio me sentí.
class AnimalEnum:
@classmethod
def verify(cls, other):
return issubclass(other.__class__, cls)
class Dog(AnimalEnum):
pass
def do_something(thing_that_should_be_an_enum):
if not AnimalEnum.verify(thing_that_should_be_an_enum):
raise OhGodWhy
class Materials:
Shaded, Shiny, Transparent, Matte = range(4)
>>> print Materials.Matte
3