On Apr 13, 2013, at 12:51 PM, Steven D'Aprano wrote: >I think that's too strong a restriction. I would expect to be able to do this: > >class Insect(Enum): > wsap = 1 # Oops, needed for backward compatibility, do not remove. > wasp = 1 # Preferred. Use this in new code. > bee = 2 > ant = 3 > > >Or at the very least: > >class Insect(Enum): > wasp = wsap = 1 > bee = 2 > ant = 3 > >What's the justification for this restriction? I have looked in the PEP, and >didn't see one.
If you allowed this, there would be no way to look up an enumeration item by value. This is necessary for e.g. storing the value in a database. If you know that the "insect" column is an INTEGER that represents an enumeration item of Insect, then you can just store the int value in the column. To reconstitute the actual enumeration item when you read the column back from the database, you need to be able to look up the item by value. Currently, you do this: >>> my_insect = Insect[database_value] but if the values are not unique, you have no way to reliably do it. I don't much like APIs which return sequences (either always or "on demand") or rely on definition order or some other arbitrary discrimination because I don't think any of those are practical in the real world. I also recall that duplication was a specific anti-feature in the previous python-ideas discussion. It was thought that this would allow for typos in the set of enumeration items to creep in. I don't see how you can reconcile these issues to allow for duplicate values. -Barry _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com