Я пытаюсь сделать некоторые перечисления в стиле C, изменяя AutoNumber из https://docs.python.org/3.4/library/enum.html#interesting -примера
Я не могу понять, как получить __init__
кодированная функция.
class MyEnum (Enum):
def __new__(cls):
value = len(cls.__members__) + 1
obj = object.__new__(cls)
obj._value_ = value
return obj
def __new__(cls, value):
super().__new__(cls, value) # It doesn't matter what I put here...
class ThingsToDo (MyEnum):
first_thing = 30
second_thing = ()
...
another_thing = 50
yet_another_thing = ()
И так далее, возможность установки значения во время инициализации. Я пробовал множество различных способов определения __new__
, но в основном получаю эту ошибку:
File "/usr/lib/python3.7/enum.py", line 218, in __new__
enum_member = __new__(enum_class, *args)
TypeError: __new__() takes 1 positional argument but 2 were given
, хотя вызов в приведенном выше коде дает мне следующее:
File "/usr/lib/python3.7/enum.py", line 218, in __new__
enum_member = __new__(enum_class, *args)
File "./codecs.py", line 34, in __new__
super().__new__(cls, value)
File "/usr/lib/python3.7/enum.py", line 564, in __new__
raise exc
File "/usr/lib/python3.7/enum.py", line 548, in __new__
result = cls._missing_(value)
File "/usr/lib/python3.7/enum.py", line 577, in _missing_
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 30 is not a valid ThingsToDo
Я либо упускаю что-то простое, либо это большая задача, чем я думал. Я не привязан к Enum , поэтому, если есть лучший способ сделать это, я готов к этому.