Should nested classes in an Enum be Enum members?
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Jun 29 22:12:58 EDT 2018
On Fri, 29 Jun 2018 10:36:45 -0700, Ethan Furman wrote:
>> What makes them enums? Under what circumstances would you be comparing
>> something to MartinLutherKingJr (Day) without caring about a *specific*
>> Martin Luther King Jr Day?
>
> Enums are also useful when the underlying value is relevant; the usual
> example is communicating with other languages' APIs. While those
> relevant values may have no intrinsic value, why is it a problem if they
> do?
But surely the underlying value of holidays *is* something we care about:
the date it falls. We don't just care about "Martin Luther King Jr Day"
as an abstraction, we do care about the specific day it falls, we care
about its relationship to other days:
- what's the last business day before MKKJ Day?
- what's the next business day after it?
- what's the date of it this year?
- will it ever fall on my birthday?
etc. I think that once we start adding methods to enums, we're starting
to move into a gray area where they aren't *really* arbitrary enumerated
values any longer. (Maybe.) If your methods use "self", then they
implicitly care about the value of the enum.
I think it's a matter of degree. Past a certain level of complexity, the
object isn't an enum any more. I don't have a problem with the "planets"
example for enums. (Maybe I should?) But your example seems to have
crossed that line for me.
At one extreme, we have pure symbols, or atoms, where the values don't
support any significant operations apart from such trivial operations
such as a human-readable string representation.
Examples in Python include None, Ellipsis and NotImplemented.
https://en.wikipedia.org/wiki/Symbol_%28programming%29
On the other extreme, we have rich, complex data types which support many
non-trivial operations, like dicts, tuples, floats and web server
objects. These typically (but not always) support a notion of equality
beyond just identity.
I think enums naturally belong very close to the Symbol end of the
continuum, and I can't help but feel your Federal Holiday example is
sufficiently far from that end that using Enum feels uncomfortable to me.
--
Steven D'Aprano
"Ever since I learned about confirmation bias, I've been seeing
it everywhere." -- Jon Ronson
More information about the Python-list
mailing list