Python 中 Enum 和 IntEnum 的区别

新手上路,请多包涵

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

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

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

IntEnum 继承是什么让我从常规类 Enum 继承不会?它们之间有什么区别?

原文由 Yuval Pruss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

来自 python 文档

Enum:用于创建枚举常量的基类。

和:

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'

原文由 Mehrdad Pedramfar 发布,翻译遵循 CC BY-SA 4.0 许可协议

IntEnum 用于确保成员必须是整数,即

class State(IntEnum):
    READY = 'a'
    IN_PROGRESS = 'b'
    FINISHED = 'c'
    FAILED = 'd'

这将引发异常:

 ValueError: invalid literal for int() with base 10: 'a'

原文由 bak2trak 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题