Python中Enum和IntEnum的区别
我遇到了一个类似这样的代码:Python中Enum和IntEnum的区别,python,python-3.x,class,enums,Python,Python 3.x,Class,Enums,我遇到了一个类似这样的代码: class State(IntEnum): READY = 1 IN_PROGRESS = 2 FINISHED = 3 FAILED = 4 我得出结论,这个State类可以以相同的方式继承Enum类 从IntEnum继承给了我什么,而从常规类Enum继承给了我什么?它们之间的区别是什么?来自python: 枚举:用于创建枚举常量的基类 以及: IntEnum:用于创建枚举常量的基类,枚举常量也是int的子类 它说,IntEnum
class State(IntEnum):
READY = 1
IN_PROGRESS = 2
FINISHED = 3
FAILED = 4
我得出结论,这个State类可以以相同的方式继承Enum
类
从IntEnum
继承给了我什么,而从常规类Enum
继承给了我什么?它们之间的区别是什么?来自python:
枚举:用于创建枚举常量的基类
以及:
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'
IntEnum用于确保成员必须是整数,即
class State(IntEnum):
READY = 'a'
IN_PROGRESS = 'b'
FINISHED = 'c'
FAILED = 'd'
这将引发一个异常:
ValueError: invalid literal for int() with base 10: 'a'
好的,如果您已经阅读了OP的文档,那么
Enum
和IntEnum
之间最明显的区别可能是Color.RED
会引起类型错误,而Shape.CIRCLE
不会。@DeepSpace确定,我加上最后一部分,它们的作用与整数相同。这里还有几个例子可以解释。谢谢你这么说,伙计。@DeepSpace,我读了文档,但写的都是基类,用于创建枚举常量,这些常量也是int的子类。
。这并没有告诉你为什么要用一个而不是另一个,即使你认为一个更适合我。我发现用例和解释@ MeHordad PeTrErFrad非常有用。一个好处是IntUm允许默认排序,EnUM不默认。我不认为这是主要区别。确保成员值为整数是一种约束,而不是一种功能,因为IntEnum
提供了与整数的直接比较(如果Enum
没有,则必须访问.value
属性)。这只能在值为整数时正确发生,因此类会为您检查这一点。