Создание перечисления с членами, атрибуты которых можно инициализироватьPython

Программы на Python
Anonymous
Создание перечисления с членами, атрибуты которых можно инициализировать

Сообщение Anonymous »

Из этого ответа я узнал, как создать перечисление с атрибутами (т. е. дополнительными данными):
from typing import NamedTuple

class EnumAttr(NamedTuple):
data: str

class EnumWithAttrs(EnumAttr, Enum):
GREEN = EnumAttr(data="hello")
BLUE = EnumAttr(data="world")

EnumWithAttrs.GREEN.data

"hello"

Теперь я бы сделал следующее:
EnumWithAttrs.BLUE(data="yellow").data

'yellow'

Иными словами: я хочу иметь возможность делать следующее:
a = EnumWithAttrs.BLUE(data="yellow")
b = EnumWithAttrs.BLUE(data="red")

Я попробовал следующее (и различные варианты), но оно не работает:
from enum import Enum
from typing import Any, Callable, NamedTuple, Self

class EnumAttr(NamedTuple):
data: str = ""

class EnumWithAttrs(EnumAttr, Enum):
GREEN = EnumAttr(data="hello")
BLUE = EnumAttr()

def with_data(self, s: str) -> Self:
self._replace(data=s)
return self

x = EnumWithAttrs.BLUE.with_data("world")
x.data

''


Подробнее здесь: https://stackoverflow.com/questions/786 ... nitialized

Вернуться в «Python»