muszę symulować stałe teksty w Pythonie, i zrobił to pisząc zajęcia jak:Zastępowanie metoda __contains__ dla klasy
class Spam(Enum):
k = 3
EGGS = 0
HAM = 1
BAKEDBEANS = 2
Teraz chciałbym sprawdzić, czy jakiś stały jest prawidłowym wyborem dla konkretnego Enum pochodzące z A klasy, z następującą składnią:
if (x in Foo):
print("seems legit")
Dlatego starałem się stworzyć „Enum” klasę bazową gdzie zastąpić metodę __contains__
takiego:
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))
Jednak, gdy za pomocą słowa kluczowego in
od klasy (jak w przykładzie powyżej), pojawia się błąd:
TypeError: argument of type 'type' is not iterable
Dlaczego to? Czy mogę jakoś uzyskać cukier syntaktyczny?
myślę, że komentarz clarifiying że kod będzie działać dobrze dla: jeżeli x in Foo(): print ("wydaje się uzasadniony") Ułatwi zrozumienie zarówno pytania, jak i odpowiedzi. Ponieważ typ (Foo()) jest Foo, ale typ (Foo) jest klasą meta. –