necesito para simular las enumeraciones en Python, y lo hizo escribiendo clases como:método __contains__ primordial de una clase
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
Ahora me gustaría probar si alguna constante es una opción válida para una enumeración particular, clase derivada de, con la siguiente sintaxis:
if (x in Foo):
print("seems legit")
Por lo tanto tratado de crear una clase base "Enum" donde anular el método __contains__
como esto:
class Enum:
"""
Simulates an enum.
"""
k = 0 # overwrite in subclass with number of constants
@classmethod
def __contains__(cls, x):
"""
Test for valid enum constant x:
x in Enum
"""
return (x in range(cls.k))
Sin embargo, cuando se utiliza la palabra clave in
en la clase (como el ejemplo anterior), me sale el error:
TypeError: argument of type 'type' is not iterable
¿Por que? ¿De alguna manera puedo obtener el azúcar sintáctico que quiero?
Creo que un comentario clarifiying que el código que funciona bien para: si x en Foo(): imprimir ('parece legítimo') Haría que tanto la pregunta como la respuesta fueran más fáciles de entender. Porque el tipo (Foo()) es Foo pero el tipo (Foo) es la metaclase. –