Python Enum
Python’s Enum
In Python, an enumeration is a data type used to create named constants, making code clearer and easier to read. In this article, we will detail the usage and features of enumerations in Python.
What is an Enum?
An enum is a data type in Python that is used to create a set of named constants. In traditional programming, we often use constants to represent fixed values, such as “LEFT,” “RIGHT,” “UP,” and “DOWN,” which represent directions. Enums can better manage these constants, making the code more readable and maintainable.
How to Use Enums
In Python, we can use the enum
module to create Enums. We first import the Enum
class, then create our own Enum class by inheriting from it.
from enum import Enum
class Direction(Enum):
LEFT = 1
RIGHT = 2
UP = 3
DOWN = 4
print(Direction.LEFT)
In the code above, we define an Enum class called Direction
, which contains four constants: LEFT
, RIGHT
, UP
, and DOWN
. We can access the value of the constant LEFT
by accessing Direction.LEFT
.
Comparing Enum Constants
When we compare constants created using Enums, Python automatically handles the comparison for us. Enum constants are compared based on their values, not their names.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED == Color.GREEN) # False
print(Color.GREEN == Color.GREEN) # True
In the example above, we define an Enum class named Color
that contains three color constants. We can compare the values of Enum constants using the ==
operator.
Accessing the Names and Values of Enum Constants
In Enum, we can access constants not only by their values but also by their names. We can use the .name
and .value
attributes to obtain the constant’s name and value.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED.name) # RED
print(Color.RED.value) # 1
In the above code, we use Color.RED.name
and Color.RED.value
to obtain the name and value of the constant RED
, respectively.
Iterating Over Enum Constants
We can use the __members__
property of the Enum
class to iterate over all the constants in the Enum class. This property returns a dictionary whose keys are the constant names and whose values are the constants themselves.
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
for color_name, color_obj in Color.__members__.items():
print(color_name, color_obj.value)
In the above code, we iterate over Color.__members__
to print the names and values of all the color constants.
Using Custom Values with Enum
When creating an Enum class, we can specify custom values for each constant. This can be useful in some cases, such as when we need a constant to have a specific value or behavior.
from enum import Enum
class Season(Enum):
SPRING = (1, "warm")
SUMMER = (2, "hot")
AUTUMN = (3, "cool")
WINTER = (4, "cold")
def __init__(self, temperature, description):
self.temperature = temperature
self.description = description
def get_temperature(self):
return self.temperature
print(Season.SUMMER.description) # hot
print(Season.SUMMER.get_temperature()) # 2
In the example above, we specify a custom value for each season constant, including a temperature and description, and define a get_temperature
method to get the constant’s temperature value.
Using Enum and Inheriting IntEnum
In addition to inheriting from the Enum
class, we can also inherit from the IntEnum
class to create an integer-based Enum, which makes numerical comparisons more convenient.
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 2
HIGH = 3
print(Priority.LOW < Priority.MEDIUM) # True
In the above example, we define an Enum class named Priority
and inherit from the IntEnum
class. This allows us to directly use operators such as <
and >
to compare the magnitudes of Enum constants.
Uses of Enums
- Clearly Represent Constants: Enums can clearly represent a group of related constants, making code easier to read and maintain.
- Avoid Hardcoding: When using Enums, we can avoid hard-coding constant values, improving code maintainability.
- Improve Readability: The names and values of Enum constants are readable, making code easier to understand.
Summary
In this article, we introduced the usage and features of Enums in Python in detail, including how to define the Enum class, compare constants, access constant names and values, iterate over Enum constants, customize constant values, and extend the IntEnum
class. Using Enums allows us to better manage constants, making code clearer and easier to read.