pythonenums

Should enum instances be compared by identity or equality?


PEP 8 Programming Recommendations says:

Comparisons to singletons like None should always be done with is or is not, never the equality operators.

According to the docs, enum members are singletons. Does that mean they should also be compared by identity?

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

# like this?
if color is Color.RED:
    ...

# or like this
if color == Color.RED:
    ...

When using equality operators, I haven't noticed any issues with this to warrant such strong wording as PEP 8. What's the drawback of using equality, if any? Doesn't it just fall back to an identity-based comparison anyway? Is this just a micro-optimisation?


Solution

  • From https://docs.python.org/3/howto/enum.html#comparisons :

    Enumeration members are compared by identity:

    >>> Color.RED is Color.RED
    True
    >>> Color.RED is Color.BLUE
    False
    >>> Color.RED is not Color.BLUE
    True