Enumerations, or enums, are a powerful feature in Python that allow you to define a set of named symbolic constants that map to unique, immutable values. Enum type can make your code more readable and self-documenting. In this post, we’ll explore Python’s enum
module, including its syntax, examples, and practical use cases.
Table of Contents
- What is an Enum?
- Defining an Enum
- Accessing Enum Members
- Iterating Over Enums
- Using Enums in a Match Statement (Python 3.10+)
- Auto-Assigning Values
- Practical Use Cases
- Conclusion
- Frequently Asked Questions (FAQ) for Python Enum
- Tutorial for Enum
What is an Enum?
An enumeration is a symbolic name for a set of values. Enumerations are defined using the enum
module in Python and are mainly used to represent constants, making the code more readable.
Defining an Enum
You can define an enum using the Enum
class from the enum
module. Here’s a basic example:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
Accessing Enum Members
You can access the members of an enum using their names or values:
print(Color.RED) # Output: Color.RED
print(Color.RED.value) # Output: 1
print(Color(1)) # Output: Color.RED
Iterating Over Enums
You can iterate over the members of an enum:
for color in Color:
print(color)
# Output:
# Color.RED
# Color.GREEN
# Color.BLUE
Using Enums in a Match Statement (Python 3.10+)
Enums can be used with the match
statement ( Read more: match statement) introduced in Python 3.10:
color = Color.RED
match color:
case Color.RED:
print("Red")
case Color.GREEN:
print("Green")
case Color.BLUE:
print("Blue")
# Output: Red
Auto-Assigning Values
You can use the auto()
function to automatically assign values to enum members:
from enum import Enum, auto
class Direction(Enum):
NORTH = auto()
SOUTH = auto()
EAST = auto()
WEST = auto()
Practical Use Cases
1. Representing States
Enums can be used to represent different states in a system:
class Status(Enum):
PENDING = 1
APPROVED = 2
REJECTED = 3
2. Handling Options
Enums can represent different options or modes in a program:
class Mode(Enum):
READ_ONLY = 1
READ_WRITE = 2
Conclusion
Enums in Python provide a robust way to define a set of named constants, making your code more readable and maintainable. By understanding how to define and use enums, you can write code that clearly expresses your intent and adheres to best practice
Frequently Asked Questions (FAQ) for Python Enum
What is an Enum in Python?
An Enum (Enumerated) type in Python is a symbolic name for a set of values. Enums are defined using the enum
module and are immutable; once they are created, they cannot be changed.
How do I create an Enum?
You can create an Enum using the enum
module’s Enum
class:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
Can I iterate over an Enum?
Yes, you can iterate over an Enum class to get its members.
for color in Color:
print(color)
How do I access Enum values and names?
You can access the value of an Enum member using .value
and the name using .name
.
print(Color.RED.value) # Output: 1
print(Color.RED.name) # Output: 'RED'
Can Enum members have string values?
Yes, you can use any immutable data type as an Enum value, including strings:
class Status(Enum):
PENDING = 'pending'
COMPLETED = 'completed'
How do I compare Enums?
You can use identity comparison (is
) and equality comparison (==
).
if some_variable is Color.RED:
print("It's red!")
What are auto-generated Enums?
If you don’t specify the values of Enum members, you can use auto()
to automatically assign values.
from enum import Enum, auto
class Color(Enum):
RED = auto()
GREEN = auto()
BLUE = auto()
What are Flag Enums?
Flag
Enums allow bitwise operations on Enum members. They are defined using the Flag
class in the enum
module.
from enum import Flag, auto
class Perm(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
Can I subclass an Enum?
Yes, but there are restrictions. The Enum members must be unique, and you cannot add members to an existing Enum.
How do I serialize Enums to JSON?
Python’s json
library doesn’t directly support serializing Enums. You can either convert them to their .value
or .name
representation before serialization or customize the serialization process using methods like default
.