I have the following enum defined:
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
now the printed value is
D.x
instead, I wanted the enum's value to be print
1
What can be done to achieve this functionality?
I have the following enum defined:
from enum import Enum
class D(Enum):
x = 1
y = 2
print(D.x)
now the printed value is
D.x
instead, I wanted the enum's value to be print
1
What can be done to achieve this functionality?
You are printing the enum object. Use the .value attribute if you wanted just to print that:
print(D.x.value)
See the Programmatic access to enumeration members and their attributes section:
If you have an enum member and need its name or value:
>>> >>> member = Color.red >>> member.name 'red' >>> member.value 1
You could add a __str__ method to your enum, if all you wanted was to provide a custom string representation:
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
I implemented access using the following
class D(Enum):
x = 1
y = 2
def __str__(self):
return '%s' % self.value
now I can just do
print(D.x) to get 1 as result.
You can also use self.name in case you wanted to print x instead of 1.
If you are going to print value using f-string then you can inherit your enum from both Enum and str. For instance:
from enum import Enum
class D(str, Enum):
x = 1
y = 2
print(D.x)
print(f"{D.x}")
Outputs:
D.x
1
The most straightforward dunder method to use is _repr_ instead of _str_ since it will also allow you to print it in that way also in lists.
class D(Enum):
x = 1
y = 2
def __repr__(self):
return self.value
print([D.x,D.y])
>>> [1, 2]
In case you want to compare your enum members to Int values, a better way to do it would be to extend IntEnum:
from enum import IntEnum
class D(IntEnum):
x = 1
y = 2
print(D.x)
In this way you can compare values of your enum against integers without explicitly calling .value:
>>> D.x == 1
True
For more information you can check this part of the Python docs: Enum comparisons