Introduction
The enum module provides support for creating enumerations - a set of symbolic names bound to unique, constant values. Enums improve code readability and prevent magic numbers.
Basic Enum
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # Color.RED
print(Color.RED.name) # RED
print(Color.RED.value) # 1
for color in Color:
print(color)
IntEnum
from enum import IntEnum
class Status(IntEnum):
PENDING = 0
SUCCESS = 1
FAILED = 2
# Can use as integers
if Status.SUCCESS == 1:
print("Success!")
result = Status(1)
print(result) # Status.SUCCESS
Enum with auto()
from enum import Enum, auto
class Direction(Enum):
NORTH = auto()
SOUTH = auto()
EAST = auto()
WEST = auto()
print([d.value for d in Direction]) # [1, 2, 3, 4]
Flag for Bit Masks
from enum import Flag, auto
class Permissions(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
read_write = Permissions.READ | Permissions.WWRITE
print(read_write) # Permissions.READ|WRITE
print(Permissions.READ in read_write) # True
Enum Methods
from enum import Enum
class Priority(Enum):
LOW = 1
MEDIUM = 2
HIGH = 3
CRITICAL = 4
@property
def is_urgent(self):
return self.value >= Priority.HIGH.value
@classmethod
def from_value(cls, value):
return cls(value)
print(Priority.HIGH.is_urgent) # True
print(Priority.from_value(2)) # Priority.MEDIUM
Practice Problems
- Create an enum for days of the week
- Use IntEnum for HTTP status codes
- Implement Flag for file permissions
- Add methods to enum classes
- Create enum with custom string values