Skip to content

Instantly share code, notes, and snippets.

@jonashaag
Created July 1, 2024 07:29
Show Gist options
  • Save jonashaag/4e1599349b816198006f2f30190afe69 to your computer and use it in GitHub Desktop.
Save jonashaag/4e1599349b816198006f2f30190afe69 to your computer and use it in GitHub Desktop.
Python Enum with label / verbose name / description
import enum
class EnumWithDisplayName(enum.Enum):
def __new__(cls, value, name=None):
if not hasattr(cls, "_display_names"):
cls._display_names = {}
if name is not None:
if value in cls._display_names:
raise NotImplementedError(f"'{cls.__name__}' values must be unique")
cls._display_names[value] = name
if not issubclass(cls, value.__class__):
raise TypeError(
"Enum class must be subtype of its value class: " f"'class {cls.__name__}({value.__class__.__name__}, EnumWithDisplayName)'"
)
enum_obj = value.__class__.__new__(cls, value)
enum_obj._value_ = value
return enum_obj
@property
def display_name(self):
return self._display_names.get(self.value, self.name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment