According to the answer of @clementwalter, a trick to set the Enum name attribute with tuples and a template:
from enum import Enum from types import DynamicClassAttribute class Color(Enum): RED = (1, '[RED]') GREEN = 2 BLUE = 3 def __new__(cls, value, display_name=None): obj = object.__new__(cls) obj._value_ = value obj.display_name = display_name return obj @DynamicClassAttribute def name(self): name = self.display_name or self._name_ # set a name with a tuple name_apply_template = f"my color is {name}" # set all names with a template return name_apply_template print(f"{Color.RED}, {Color.RED.value}, {Color.RED._name_}, {Color.RED.display_name}, {Color.RED.name}") print(f"{Color.GREEN}, {Color.GREEN.value}, {Color.GREEN._name_}, {Color.GREEN.display_name}, {Color.GREEN.name}") # # Results: # Color.RED, 1, RED, [RED], my color is [RED] # Color.GREEN, 2, GREEN, None, my color is GREEN