代码之家  ›  专栏  ›  技术社区  ›  Yuval Pruss

python中枚举和intenum的区别

  •  4
  • Yuval Pruss  · 技术社区  · 6 年前

    我遇到一个类似这样的代码:

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

    我得出结论,这个国家阶级可以继承 Enum 以同样的方式上课。

    继承自什么 IntEnum 从普通类继承的 枚举 不会?他们之间有什么区别?

    2 回复  |  直到 6 年前
        1
  •  5
  •   Mehrdad Pedramfar    6 年前

    从蟒蛇 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'
    
        2
  •  2
  •   bak2trak    6 年前

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

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

    这将引发异常:

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