Tengo la siguiente enumeración definida
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
ahora el valor impreso es
D.x
en cambio, quería que el valor de la enumeración se imprimiera
1
¿Qué se puede hacer para lograr esta funcionalidad?
python
python-3.x
enums
python-3.4
Vaibhav Mishra
fuente
fuente
Respuestas:
Está imprimiendo el objeto enum . Use el
.value
atributo si solo desea imprimir eso:Consulte la sección Acceso programático a los miembros de la enumeración y sus atributos :
Puede agregar un
__str__
método a su enumeración, si todo lo que quisiera fuera proporcionar una representación de cadena personalizada:Manifestación:
fuente
if D.x == 10: ...
. : . ¿Qué enfoque debo tomar para los números enteros?D.x
es el objeto enum,D.x.value
es un valor entero. Si debe hacer que los valores de enumeración actúen como números enteros, use elIntEnum
tipo , donde cada elemento es una subclase deint
y, porIntEnumD.x == 10
lo tanto , funcionaría.def __eq__(self, other): return int(self.value) == other
ydef __int__(self): return int(self.value)
todavía creo que tengo que usarlo.value
en casos en los que no uso la comparación__eq__
implementación no funciona cuandoother
hay otro valor de enumeración;D.x == D.y
, dondeD.x.value == D.y.value
sería cierto, fallaría por ejemplo. Parece que desea usar enIntEnum
lugar deEnum
allí.Implementé el acceso usando lo siguiente
ahora solo puedo hacer
print(D.x)
para obtener1
como resultado.También puede utilizarlo
self.name
en caso de que desee imprimir enx
lugar de1
.fuente
self._value_
?return str(self.value)
es más sencillo.self.value
es más limpio.value
como nombre en su tipo de enumeración).Encontré esta página cuando buscaba acceder a
Enum
una cadena. Sé que esto no es lo que se pregunta en esta pregunta en particular, pero el título lo "sugiere".Para obtener una enumeración usando una cadena, puede hacer lo siguiente:
fuente