David Hagen added the comment:
> Secondarily, the doesn't seem to be any use case that can't be readily
> covered by the existing classes.
The use case that doesn't have a clean interface in 3.5 at the moment is the
most common use case of enums: just a collection of named objects of given
type; I don't care about the values because they don't really have values apart
from their object identities.
When writing enums in Rust, Swift, C#, etc., the bare identifier not only saves
typing--it allows the developer to explicitly indicate that the underlying
value has no meaning. (It may be better to use "object()" rather than an
integer on AutoEnum, but that is not very important.)
It was said that Python has this feature already:
> Yes, Python 3.4 too: Animal = Enum('Animal', 'ant bee cat dog')
I will concede that this can do what I want. I hope others will concede that
this is not a clean interface. The class name is duplicated and the members are
regexed out of a space-delimited string. This same argument could be made to
deprecate the unnecessary "class" keyword in favor of the "type" function.
I will also concede that there is some deep magic going on in AutoEnum and that
magic should be avoided when it obscures. I personally think the only people
who will be truly surprised will be those who already know Python at a deep
enough level to know that deep magic must be required here. Everyone else will
see "Enum" and a list of bare identifiers, and correctly conclude that this is
your basic enum from everyone other language.
Perhaps an ideal solution would be an enum keyword:
enum PrimaryColor:
red
blue
green
But that's not happening ever.
The next best solution is the current implementation:
class PrimaryColor(AutoEnum):
red
blue
green
But because of the magic, it only barely beats out what I think is the other
great solution already mentioned here:
class PrimaryColor(AutoEnum):
red = ()
blue = ()
green = ()
These two solutions are isomorphic. Both save the developer from having to
provide a (possibly meaningless) value. Both let docstrings be added. Both
provide the ability to reorganize without renumbering. The last one trades
magic for boilerplate.
I'll keep using them from the aenum package if they don't make it into 3.6, but
I think this is a fundamental enough construct that it belongs in the standard
library. It is hard to convince tool maintainers to fully support these until
they are blessed here.
----------
nosy: +David Hagen
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue26988>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com