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