Python中Enum和IntEnum之间的区别

时间:2018-10-22 12:57:04

标签: python python-3.x enums

我遇到了一个看起来像这样的代码:

class State(IntEnum):
    READY = 1
    IN_PROGRESS = 2
    FINISHED = 3
    FAILED = 4

我得出的结论是,该State类可以以相同的方式继承Enum类。

IntEnum继承给我带来了什么,从常规类Enum继承却没有呢?它们之间有什么区别?

3 个答案:

答案 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