我遇到了一个看起来像这样的代码:
class State(IntEnum):
READY = 1
IN_PROGRESS = 2
FINISHED = 3
FAILED = 4
我得出的结论是,该State类可以以相同的方式继承Enum
类。
从IntEnum
继承给我带来了什么,从常规类Enum
继承却没有呢?它们之间有什么区别?
答案 0 :(得分:5)
通过python Docs:
枚举:用于创建枚举常量的基类。
和:
IntEnum:用于创建枚举常量的基类,这些常量也是int的子类。
它表示IntEnum
的成员可以与整数进行比较;通过扩展,还可以将不同类型的整数枚举相互比较。
看下面的例子:
class Shape(IntEnum):
CIRCLE = 1
SQUARE = 2
class Color(Enum):
RED = 1
GREEN = 2
Shape.CIRCLE == Color.RED
>> False
Shape.CIRCLE == 1
>>True
,它们的行为与整数相同:
['a', 'b', 'c'][Shape.CIRCLE]
>> 'b'
答案 1 :(得分:2)
IntEnum用于确保成员必须为整数,即
class State(IntEnum):
READY = 'a'
IN_PROGRESS = 'b'
FINISHED = 'c'
FAILED = 'd'
这将引发异常:
ValueError: invalid literal for int() with base 10: 'a'
答案 2 :(得分:0)
intEnum 具有以下优点:
1/ 确保成员必须是整数
(ValueError: invalid literal for int() with base 10
不满意会加薪)
2/ 允许与整数比较
import enum
class Shape(enum.IntEnum):
CIRCLE = 1
SQUARE = 2
class Color(enum.Enum):
RED = 1
GREEN = 2
print(Shape.CIRCLE == 1)
# >> True
print(Color.RED == 1)
# >> False