Eu tenho o seguinte enum definido
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
agora o valor impresso é
D.x
em vez disso, queria que o valor do enum fosse print
1
O que pode ser feito para obter essa funcionalidade?
python
python-3.x
enums
python-3.4
Vaibhav Mishra
fonte
fonte
Respostas:
Você está imprimindo o enum objeto . Use o
.value
atributo se você quiser apenas imprimir:Veja o acesso programático a membros de enumeração e seus atributos seção :
Você pode adicionar um
__str__
método ao seu enum, se tudo o que você quisesse fosse fornecer uma representação de string personalizada:Demo:
fonte
if D.x == 10: ...
. Qual abordagem devo adotar para inteiros?D.x
é o objeto enum,D.x.value
é um valor inteiro. Se você deve fazer com que os valores enum atuem como inteiros, use oIntEnum
tipo , onde cada elemento é uma subclasse deint
e, portantoIntEnumD.x == 10
, funcionaria.def __eq__(self, other): return int(self.value) == other
edef __int__(self): return int(self.value)
mas ainda acho que tenho de usar.value
em casos quando eu não usar comparando__eq__
implementação não funciona quandoother
é outro valor enum;D.x == D.y
, ondeD.x.value == D.y.value
seria verdade, falharia por exemplo. Parece que você deseja usar emIntEnum
vez deEnum
lá.Implementei o acesso usando o seguinte
agora eu posso apenas fazer
print(D.x)
para obter1
como resultado.Você também pode usar
self.name
caso queira imprimir emx
vez de1
.fonte
self._value_
?return str(self.value)
é mais direto.self.value
está mais limpo.value
como um nome em seu tipo de enum).Encontrei esta página ao pesquisar para acessar um
Enum
usando uma string. Eu sei que não é isso que está sendo perguntado nesta questão particular, mas o título "sugere" isso.Para obter um Enum usando uma String, você pode fazer o seguinte:
fonte