switch not enumeracion enum python enums

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