ну либо метакласс
Метакласс в любом случае, вопрос в другом -- оно же не станет частью класса, это надо синтаксис менять.
class Dict(dict): def __missing__(self, key): self[key] = key class Meta(type): @classmethod def __prepare__(metacls, name, bases): return Dict() class DumbEnum(metaclass=Meta): VALUE ANOTHER_VALUE print(DumbEnum.VALUE)
Если сделать DumbEnum без значений, от него можно будет наследоваться же?
Но ты не сможешь сделать множественное наследование от StrEnum и DumbEnum, если что
Это прям лютая штука. То есть, когда знаешь, что __prepare__ неймспейс возвращает -- оно кажется обычным кодом, все логично, но до этого черная магия какая-то...
Я о том что юзеру не обязательно знать что при создании енума используется какой-то там метакласс. Гораздо важнее ему знать что его енум это потомок абстрактного DumbEnum
Обсуждают сегодня