Ho definito l'enum seguente
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
ora il valore stampato è
D.x
invece volevo che il valore dell'enumerazione fosse print
1
Cosa si può fare per ottenere questa funzionalità?
Ho definito l'enum seguente
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
ora il valore stampato è
D.x
invece volevo che il valore dell'enumerazione fosse print
1
Cosa si può fare per ottenere questa funzionalità?
Risposte:
Stai stampando l' oggetto enum . Usa l' .valueattributo se vuoi solo stamparlo:
print(D.x.value)
Vedere l' accesso programmatico ai membri di enumerazione e la loro attributi sezione :
Se hai un membro enum e hai bisogno del suo nome o valore:
>>> >>> member = Color.red >>> member.name 'red' >>> member.value 1
Potresti aggiungere un __str__metodo alla tua enumerazione, se tutto ciò che desideri fosse fornire una rappresentazione di stringa personalizzata:
class D(Enum):
def __str__(self):
return str(self.value)
x = 1
y = 2
demo:
>>> from enum import Enum
>>> class D(Enum):
... def __str__(self):
... return str(self.value)
... x = 1
... y = 2
...
>>> D.x
<D.x: 1>
>>> print(D.x)
1
if D.x == 10: .... Quale approccio devo adottare per i numeri interi?
D.xè l'oggetto enum, D.x.valueè un valore intero. Se devi fare in modo che i valori enum agiscano come interi, usa il IntEnumtipo , dove ogni elemento è una sottoclasse di inte così IntEnumD.x == 10funzionerebbe.
def __eq__(self, other): return int(self.value) == othere def __int__(self): return int(self.value)ma penso ancora di doverlo usare .valuenei casi in cui non uso il confronto
__eq__non funziona quando otherè un altro valore enum; D.x == D.y, dove D.x.value == D.y.valuesarebbe vero, fallirebbe per esempio. Sembra che tu voglia usare IntEnuminvece di Enumlì.
Ho implementato l'accesso utilizzando quanto segue
class D(Enum):
x = 1
y = 2
def __str__(self):
return '%s' % self.value
ora posso solo fare
print(D.x)per ottenere 1come risultato.
Puoi anche usare self.namenel caso in cui volessi stampare xinvece di 1.
self._value_? return str(self.value)è più semplice.
self.valueè più pulito.
valuecome nome sul tuo tipo di enumerazione).
Ho trovato questa pagina durante la ricerca di accesso a Enumutilizzando una stringa. So che questo non è ciò che viene chiesto in questa particolare domanda, ma il titolo lo "suggerisce".
Per ottenere un Enum usando una stringa puoi fare quanto segue:
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D["x"]) # <D.x: 1>