A key line seems to be buried in the "Summary" at the end of the post: "Python native enums are great for what they were designed to do, but..." Barring tricks I'm unaware of, enums in other popular languages, such as Go and TypeScript, don't support the author's more complex usage either—probably by design.
Out of curiosity, are there languages for which the enum implementation supports and encourages encoding complex data like this?
Often called sum types, it's really convenient when your language supports both building these kinds of enums as well as destructuring them with pattern matching.
If you don't have destructuring, they're less attractive. There's a proposal to add destructuring to python[1] so we'll see
Part of the reason why Enums weren’t originally added to the stdlib was because if you get ten developers in a room there will be eleven conflicting expectations from an Enum class.
Personally I’ve never needed to use the Enum class, ever, in the last five years of Python development. It takes barely any time to implement a custom replacement if you need one, but for 99% of my use cases a dictionary or tuple has been enough.
Enums are implemented in a weird way in Python, not as part of the language but as a class that modifies itself. That said, this article is not what I expected.
A very odd construct. Coming from Java, a big disappointment, Python enums, pretty much useless. To those who say "just roll your own", sure, but why not make the existing one actually usable?
13 comments
[ 2.7 ms ] story [ 47.2 ms ] threadOut of curiosity, are there languages for which the enum implementation supports and encourages encoding complex data like this?
Look how they encode planetary data into the enum of the Solar system planets.
https://doc.rust-lang.org/rust-by-example/custom_types/enum....
[0] https://www.reddit.com/r/rust/comments/l594zl/everywhere_i_g...
If you don't have destructuring, they're less attractive. There's a proposal to add destructuring to python[1] so we'll see
[1] https://www.python.org/dev/peps/pep-0634/
Juse use Python's `dataclass` or similar (`pydantic` is great) and just build the custom data types that you need.
Personally I’ve never needed to use the Enum class, ever, in the last five years of Python development. It takes barely any time to implement a custom replacement if you need one, but for 99% of my use cases a dictionary or tuple has been enough.
So yes you can always use something else just like all the fold/zip/map can be replaced with also something else ;)