Search code examples
pythonpython-3.xclassenumsinteger

Difference between Enum and IntEnum in Python


I came across a code that looked like this:

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

and I came to the conclusion that this State class could inherit the Enum class in the same way.

What does inheriting from IntEnum gives me that inheriting from the regular class Enum won't? What is the difference between them?


Solution

  • From the python Docs:

    Enum: Base class for creating enumerated constants.

    and:

    IntEnum: Base class for creating enumerated constants that are also subclasses of int.

    it says that members of an IntEnum can be compared to integers; by extension, integer enumerations of different types can also be compared to each other.

    look at the below example:

    class Shape(IntEnum):
        CIRCLE = 1
        SQUARE = 2
    
    class Color(Enum):
        RED = 1
        GREEN = 2
    
    Shape.CIRCLE == Color.RED
    >> False
    
    Shape.CIRCLE == 1
    >>True
    

    and they will behave same as an integer:

    ['a', 'b', 'c'][Shape.CIRCLE]
    >> 'b'