class TextEnum(enum.Enum):
"""Версия enum'а, в которой можно сохранять текстовые описания элементов.
Чтобы использовать, нужно отнаследоваться от этого класса, как от обычного :class:`enum.Enum`,
элементами которого будут тьюплы (значение, текстовое описание):
.. code:: python
class ExampleEnum(TextEnum):
FIRST = 1, 'Первый'
ExampleEnum.FIRST.name # 'FIRST'
ExampleEnum.FIRST.value # 1
ExampleEnum.FIRST.text # 'Первый'
"""
def __new__(cls, value: Any, text: str, *args, **kwargs) -> 'TextEnum':
"""Создает новый элемент enum'а, добавляя на него атрибут `text`.
:param value: значение, которое попадет в атрибут `value`
:param text: значение, которое попадет в атрибут `text`
:param args: остальные аргументы
:param kwargs: кваргументы
:return: новый элемент enum'а
"""
obj = object.__new__(cls) # type: ignore
obj._value_ = value
obj.text = text
return obj