Bradley Kirton's Blog

Published on Aug. 22, 2025

Go home

Extending enums with multiple values

Below is a useful pattern for extending python enums with other useful data.

import enum

class ContentType(enum.StrEnum):
    CSV = "csv", "text/csv", ".csv"

    def __new__(cls, value: str, mime_type: str, extension: str) -> str:
        obj = str.__new__(cls, value)
        obj._value_ = value
        obj.mime_type = mime_type
        obj.extension = extension
        return obj

print('ContentType.CSV == "csv":', ContentType.CSV == "csv")
print("ContentType.CSV.value:", ContentType.CSV.value)
print("ContentType.CSV.mime_type:", ContentType.CSV.mime_type)
print("ContentType.CSV.extension:", ContentType.CSV.extension)
print('ContentType("csv"):', type(ContentType("csv")))

# ContentType.CSV == "csv": True
# ContentType.CSV.value: csv
# ContentType.CSV.mime_type: text/csv
# ContentType.CSV.extension: .csv
# ContentType("csv"): <enum 'ContentType'>