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
.valueatributo 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.xes el objeto enum,D.x.valuees un valor entero. Si debe hacer que los valores de enumeración actúen como números enteros, use elIntEnumtipo , donde cada elemento es una subclase deinty, porIntEnumD.x == 10lo tanto , funcionaría.def __eq__(self, other): return int(self.value) == otherydef __int__(self): return int(self.value)todavía creo que tengo que usarlo.valueen casos en los que no uso la comparación__eq__implementación no funciona cuandootherhay otro valor de enumeración;D.x == D.y, dondeD.x.value == D.y.valuesería cierto, fallaría por ejemplo. Parece que desea usar enIntEnumlugar deEnumallí.Implementé el acceso usando lo siguiente
ahora solo puedo hacer
print(D.x)para obtener1como resultado.También puede utilizarlo
self.nameen caso de que desee imprimir enxlugar de1.fuente
self._value_?return str(self.value)es más sencillo.self.valuees más limpio.valuecomo nombre en su tipo de enumeración).Encontré esta página cuando buscaba acceder a
Enumuna 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