pythonintermediate

Python Enum Advanced Patterns

Use Python enums with custom values, methods, auto(), and Flag for type-safe constants.

python
from enum import Enum, auto, Flag, IntEnum
from functools import total_ordering

class Color(Enum):
    RED = "#FF0000"
    GREEN = "#00FF00"
    BLUE = "#0000FF"

    @property
    def rgb(self) -> tuple[int, int, int]:
        hex_val = self.value.lstrip('#')
        return tuple(int(hex_val[i:i+2], 16) for i in (0, 2, 4))

class Status(Enum):
    PENDING = auto()
    ACTIVE = auto()
    SUSPENDED = auto()
    DELETED = auto()

    def is_visible(self) -> bool:
        return self in (Status.PENDING, Status.ACTIVE)

class Permission(Flag):
    READ = auto()
    WRITE = auto()
    DELETE = auto()
    ADMIN = READ | WRITE | DELETE

admin_perms = Permission.READ | Permission.WRITE
print(Permission.READ in admin_perms)   # True
print(Permission.DELETE in admin_perms) # False

@total_ordering
class Priority(IntEnum):
    LOW = 1
    MEDIUM = 2
    HIGH = 3
    CRITICAL = 4

tasks = [Priority.HIGH, Priority.LOW, Priority.CRITICAL]
print(sorted(tasks))  # [LOW, HIGH, CRITICAL]

Use Cases

  • type-safe constants
  • permission systems
  • state machines

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.