Python‘s Enum makes me (a little) angry

Python implementation of Enum screams “design by committee” to me. Enums are supposed to work as replacements for constants in a file or even attributes in a class… why on earth printing an item doesn’t return the value?

class Color(Enum):
    FRONT = "#ffaf2e"
    BACK = "#dedede"

>>> str(Color.FRONT)
'Color.FRONT'   # Are you kidding me!??

>>> str(Color.FRONT.value)
'#ffaf2e'   # I'm not amused 😒

The worst/best part is that is super easy to fix. Just with a str method:

class PracticalEnum(Enum):
    def __str__(self):
        return str(self.value)

class Color(PracticalEnum):
    FRONT = "#ffaf2e"
    BACK = "#dedede"

>>> str(Color.FRONT)
'#ffaf2e'   # YEAH SCIENCE! 💪

Now we are talking!

Comments? Write me a quick email.
Written on
Juan-Pablo Scaletti

Hi I’m Juan-Pablo Scaletti

I’m a software writer and open-source creator. This is my corner of the Internet.