Ich habe folgende Aufzählung definiert
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
jetzt ist der gedruckte Wert
D.x
Stattdessen wollte ich, dass der Wert der Aufzählung gedruckt wird
1
Was kann getan werden, um diese Funktionalität zu erreichen?
python
python-3.x
enums
python-3.4
Vaibhav Mishra
quelle
quelle
Antworten:
Sie drucken das Enum- Objekt . Verwenden Sie das
.value
Attribut, wenn Sie nur das drucken möchten:Siehe den Abschnitt Programmatischer Zugriff auf Aufzählungselemente und ihre Attribute :
Sie können
__str__
Ihrer Aufzählung eine Methode hinzufügen , wenn Sie lediglich eine benutzerdefinierte Zeichenfolgendarstellung bereitstellen möchten:Demo:
quelle
if D.x == 10: ...
. Welchen Ansatz sollte ich für ganze Zahlen wählen?D.x
ist das Enum-Objekt,D.x.value
ist ein ganzzahliger Wert. Wenn sich die Aufzählungswerte wie Ganzzahlen verhalten müssen, verwenden Sie denIntEnum
Typ , bei dem jedes Element eine Unterklasse von istint
und daherIntEnumD.x == 10
funktionieren würde.def __eq__(self, other): return int(self.value) == other
unddef __int__(self): return int(self.value)
trotzdem denke ich, dass ich in.value
Fällen verwenden muss, in denen ich keinen Vergleich verwende__eq__
Implementierung funktioniert nicht, wennother
es sich um einen anderen Enum-Wert handelt.D.x == D.y
, woD.x.value == D.y.value
wahr wäre, würde zum Beispiel scheitern. Es hört sich so an, als ob Sie esIntEnum
anstelle vonEnum
dort verwenden möchten .Ich habe den Zugriff wie folgt implementiert
jetzt kann ich es einfach machen
print(D.x)
1
als Ergebnis zu bekommen .Sie können auch verwenden,
self.name
wenn Siex
statt drucken möchten1
.quelle
self._value_
?return str(self.value)
ist einfacher.self.value
sind sauberer.value
als Namen für Ihren Aufzählungstyp verwenden können).Ich habe diese Seite gefunden, als ich nach dem Zugriff
Enum
auf eine Zeichenfolge gesucht habe . Ich weiß, dass dies nicht das ist, was in dieser speziellen Frage gestellt wird, aber der Titel "schlägt" es vor.Um eine Aufzählung mit einem String zu erhalten, haben Sie folgende Möglichkeiten:
quelle