#python #python-3.x #enums
#python #python-3.x #перечисления
Вопрос:
РЕДАКТИРОВАТЬ: оказывается, это была просто ошибка, которая была исправлена в версии 3.7.1.
Если я создаю класс mixin и пытаюсь добавить его, чтобы добавить его в IntEnum
, я получаю эту ошибку:
>>> from enum import IntEnum
>>> class Mixin:
... pass
...
>>> class C(Mixin, IntEnum):
... A=1
... B=2
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:UsersuserAppDataLocalProgramsPythonPython37libenum.py", line 211, in __new__
enum_member = __new__(enum_class)
TypeError: object.__new__(C) is not safe, use int.__new__()
Это тоже не работает (та же ошибка):
from enum import IntEnum
class M: ...
class C(M, IntEnum): ...
class D(C):
A=1
B=2
Документы, похоже, указывают, что это должно быть возможно, и это работает для обычного Enum
:
>>> from enum import Enum
>>> class Mixin:
... pass
...
>>> class D(Mixin, Enum):
... A=1
... B=2
...
>>>
Не уверен , является ли это ошибкой или ограничением IntEnum
. Что здесь происходит?
Комментарии:
1. Ваш первый код отлично работает, когда я его пробую. Python 3.7.2
2.
Enum
несколько странно; он злоупотребляет метаклассами, чтобы «перехватить»class
оператор для определения чего-либо с явно неклассовой семантикой.3. @khelwood это не работает в версии 3.7.0. мне придется попробовать это в версии 3.7.2.
4. Возможно, это: bugs.python.org/issue29577
5. Проблема была вызвана ошибкой, которая была исправлена.
Ответ №1:
Эта ошибка была исправлена с версии Python 3.7.1.