Mam zdefiniowane następujące wyliczenie
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
teraz drukowana wartość to
D.x
zamiast tego chciałem wydrukować wartość wyliczenia
1
Co można zrobić, aby osiągnąć taką funkcjonalność?
python
python-3.x
enums
python-3.4
Vaibhav Mishra
źródło
źródło
Odpowiedzi:
Drukujesz obiekt wyliczenia . Użyj
.value
atrybutu, jeśli chcesz po prostu wydrukować to:Zobacz sekcję Programowy dostęp do elementów członkowskich wyliczenia i ich atrybutów :
Możesz dodać
__str__
metodę do swojego wyliczenia, jeśli wszystko, co chcesz, to zapewnić niestandardową reprezentację ciągu:Próbny:
źródło
if D.x == 10: ...
. : . Jakie podejście należy przyjąć w przypadku liczb całkowitych?D.x
jest obiektem wyliczenia,D.x.value
jest wartością całkowitą. Jeśli wartości wyliczenia muszą zachowywać się jak liczby całkowite, użyjIntEnum
typu , w którym każdy element jest podklasąint
i takIntEnumD.x == 10
będzie działać.def __eq__(self, other): return int(self.value) == other
idef __int__(self): return int(self.value)
ale nadal myślę, że muszę używać.value
w przypadkach, gdy nie używam porównywania__eq__
implementacja nie działa, gdyother
jest inną wartością wyliczenia;D.x == D.y
, gdzieD.x.value == D.y.value
byłoby prawdą, nie powiedzie się na przykład. Wygląda na to, że chcesz użyćIntEnum
zamiast tegoEnum
.Zaimplementowałem dostęp za pomocą następującego
teraz mogę po prostu zrobić
print(D.x)
uzyskać1
jako wynik.Możesz również użyć,
self.name
jeśli chcesz drukowaćx
zamiast1
.źródło
self._value_
?return str(self.value)
jest prostsze.self.value
jest czystsze.value
jako nazwy w typie wyliczenia).Znalazłem tę stronę podczas wyszukiwania dostępu do
Enum
ciągu znaków. Wiem, że nie o to zadaje się w tym konkretnym pytaniu, ale tytuł „sugeruje” to.Aby uzyskać wyliczenie za pomocą ciągu, możesz wykonać następujące czynności:
źródło