修复“新枚举必须创建为”

fla*_*urn 8 python enums typeerror python-2.7

我正在使用 Python 2 并且有以下课程

import enum

class MyClass(object):
    pass

@enum.unique
classMyEnum(enum.IntEnum, MyClass):
    A = 1
    B = 2
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,出现以下错误:

  File "C:\Python27\lib\site-packages\enum\__init__.py", line 506, in _get_mixins_
    raise TypeError("new enumerations must be created as "
TypeError: new enumerations must be created as `ClassName([mixin_type,] enum_type)`
Run Code Online (Sandbox Code Playgroud)

我经常使用 Python,但我必须承认我从未真正投入其中。我真的无法弄清楚发生了什么。我不太确定如何阅读此错误。有人可以帮我解决这个问题吗?

MSe*_*ert 9

该错误是因为您需要在课程MixinType之前列出Enum,例如:

class FunEnum(int, Enum):
    A = 1
    B = 2
Run Code Online (Sandbox Code Playgroud)

但由于您已经在使用intEnum(这已经是混合枚举),您不想混合使用另一种类型,对吗?所以你可以简单地使用:

@enum.unique
class FunEnum(enum.IntEnum):
    A = 1
    B = 2
Run Code Online (Sandbox Code Playgroud)

MyClassmixin 类型定义了值将转换为哪个类,如果需要的话,Python 如何解决这个问题int?因此尝试它会引发另一个错误:

@enum.unique
class FunEnum(str, enum.IntEnum):
    A = 1
    B = 2
Run Code Online (Sandbox Code Playgroud)

类型错误:多个基地有实例布局冲突

或者

class MyClass(object):
    pass

@enum.unique
class FunEnum(MyClass, enum.IntEnum):
    A = 1
    B = 2
Run Code Online (Sandbox Code Playgroud)

类型错误:object.__new__(FunEnum)不安全,请使用int.__new__()

  • 实际上,如果继承顺序正确的话,将 `MyClass` 和 `int` 与 `Enum` 混合起来似乎工作得很好。`class MyEnum(int, MyClass, enum.Enum):` 工作得很好,因为它确保 `int.__new__` 优先于泛型(并且不适合 `int` 子类)`object.__new__`。您只需明确地将“int”放在其他超类之前,这意味着您必须分别继承“int”和“enum.Enum”(但这很好;“IntEnum”本身是一个空类,定义为“类 IntEnum(int, Enum):`)。 (2认同)