On 2008-01-24, Raymond Hettinger wrote:
[Mark Summerfeld]
I think enums are a common enough requirement to be worth adding to the standard library---not to the language.
-1 This is clutter.
Also, I disagree about there being a need. We've long been able to roll our own with a simple class definition (like the first example shown below), but people rarely do that. They don't want to pay the cost in speed (for the attribute lookup) and find that all the prefixed references make their code look more Javaesque that Pythonesque.
Over years of looking at tons of Python code, I've seen several variants of enums. In *every* case, they were just a toy recipe and were not be used in anything other than demo code.
Did you also see lots of examples of people creating their own set types? Until something is part of the language or library people will toy with their own version but probably won't commit to it. But once something is standardised it gets used---if it is general purpose. For example, I use sets all the time now, but they are a relatively new feature in Python, so before I often had dicts with None values. [snipped examples]
There are already so many reasonable ways to do this or avoid doing it, that it would be silly to add an Enum factory.
I thought that one of Python's strengths was supposed to be that in general there is just one best way to do things.
IMO, Enum() is in the category of recipes that are like variants of flatten() or Sudoku solvers; they are fun to write but no one really needs them.
None of the examples you gave provides any level of const-ness. Yet namedtuple's and tuples do. And an enum factory function for collections could be as simple as: def enum(field_names, values=None): e = collections.namedtuple("_enum", field_names) if values is None: values = range(len(field_names.split())) return e(*values) (Although this doesn't account for pickling.)
Vehicle = enum("car van bus truck") Vehicle.car, Vehicle.van, Vehicle.bus, Vehicle.truck (0, 1, 2, 3) Limit = enum("minimum maximum default", (-50, 50, 10)) Limit.default 10
-- Mark Summerfield, Qtrac Ltd., www.qtrac.eu