Не удается расширить значение python с помощью класса Mixin

#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.