Yuv*_*uss 7 python enums python-3.x
我遇到了一个看起来像这样的代码:
class State(IntEnum):
READY = 1
IN_PROGRESS = 2
FINISHED = 3
FAILED = 4
Run Code Online (Sandbox Code Playgroud)
我得出的结论是,这个State类可以Enum
以相同的方式继承该类。
从继承继承IntEnum
给我的东西是什么,而从常规类继承不会给我带来Enum
什么呢?它们之间有什么区别?
Meh*_*far 10
从python Docs:
枚举:用于创建枚举常量的基类。
和:
IntEnum:用于创建枚举常量的基类,这些常量也是int的子类。
它说IntEnum
可以将an的成员与整数进行比较;通过扩展,也可以将不同类型的整数枚举进行比较。
看下面的例子:
class Shape(IntEnum):
CIRCLE = 1
SQUARE = 2
class Color(Enum):
RED = 1
GREEN = 2
Shape.CIRCLE == Color.RED
>> False
Shape.CIRCLE == 1
>>True
Run Code Online (Sandbox Code Playgroud)
它们的行为与整数相同:
['a', 'b', 'c'][Shape.CIRCLE]
>> 'b'
Run Code Online (Sandbox Code Playgroud)
IntEnum 用于确保成员必须是整数,即
class State(IntEnum):
READY = 'a'
IN_PROGRESS = 'b'
FINISHED = 'c'
FAILED = 'd'
Run Code Online (Sandbox Code Playgroud)
这将引发异常:
ValueError: invalid literal for int() with base 10: 'a'
Run Code Online (Sandbox Code Playgroud)