enum
Updated March 13, 2026 · Modules
stdlib constants enumeration types
The enum module defines classes for creating enumerations — related constants that belong to a named group. Enums make code more readable and prevent magic numbers by giving meaningful names to specific values.
Basic Enum
Define an enum by subclassing 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
Each member has both a name (the identifier) and a value (the underlying data).
Auto Values
Use auto() to assign values automatically:
from enum import Enum, auto
class Direction(Enum):
NORTH = auto()
EAST = auto()
SOUTH = auto()
WEST = auto()
print([d.value for d in Direction])
# [1, 2, 3, 4]
Iteration and Membership
class Status(Enum):
DRAFT = 1
PUBLISHED = 2
ARCHIVED = 3
# Iterate over all members
for status in Status:
print(status.name)
# DRAFT
# PUBLISHED
# ARCHIVED
# Check membership
print(Status.DRAFT in Status)
# True
# Access by name
print(Status['PUBLISHED'])
# Status.PUBLISHED
# Access by value
print(Status(2))
# Status.PUBLISHED
IntEnum
IntEnum combines Enum with int, allowing comparisons with integers:
from enum import IntEnum
class HTTPStatus(IntEnum):
OK = 200
NOT_FOUND = 404
SERVER_ERROR = 500
print(HTTPStatus.OK == 200)
# True
StrEnum (Python 3.11+)
StrEnum members are strings:
from enum import StrEnum
class Method(StrEnum):
GET = "GET"
POST = "POST"
print(Method.GET == "GET")
# True
Flag and IntFlag
Flag creates bitwise-enumerable constants:
from enum import Flag, auto
class Permission(Flag):
READ = auto()
WRITE = auto()
EXECUTE = auto()
# Combine permissions
read_write = Permission.READ | Permission.WRITE
print(read_write)
# Permission.READ|WRITE
# Check if flag is set
print(Permission.READ in read_write)
# True
IntFlag is like Flag but allows integer operations:
from enum import IntFlag
class FileMode(IntFlag):
R = 4
W = 2
X = 1
mode = FileMode.R | FileMode.W
print(mode)
# 6
Enum Methods
Enums provide useful methods and properties:
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# List all member names
print(Color.__members__.keys())
# dict_keys(['RED', 'GREEN', 'BLUE'])
# Get member by name (including aliases)
print(Color['RED'])
# Color.RED
# Iterating includes aliases
class Mixed(Enum):
A = 1
B = 2
C = 1 # alias for A
print(list(Mixed))
# [<Mixed.A: 1>, <Mixed.B: 2>]
print(list(Mixed.__members__.items()))
# [('A', <Mixed.A: 1>), ('B', <Mixed.B: 2>), ('C', <Mixed.C: 1>)]
Custom Enum Classes
Add methods to enum classes like any other class:
class Color(Enum):
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
def rgb(self):
return self.value
@property
def hex(self):
r, g, b = self.value
return f'#{r:02x}{g:02x}{b:02x}'
print(Color.RED.rgb())
# (255, 0, 0)
print(Color.GREEN.hex)
# #00ff00
See Also
- built-in::int — integer type for IntEnum
- str::str — string type for StrEnum