Published on Aug. 22, 2025
Go homeExtending 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'>