On 05/12/2013 04:49 PM, Raymond Hettinger wrote:
After the long design effort for the enum module,
I'm sure there will be a forthcoming effort to apply
them pervasively throughout the standard library.

I'd like to apply them where it makes sense. It would be a good way for me to learn all that's in the stdlib while doing something modestly useful.


For internal constants such as those in idlelib and regex,
the user won't see any benefit at all.

Devs are users, too!  If it makes our lives easier, then, ultimately, it will 
make our users lives easier as well.

But there will be
a cost in terms of code churn, risk of introducing errors
in stable code, modestly slowing-down the code, making
it more difficult to apply bug fixes across multiple versions
of Python, and increased code verbosity (i.e. changing
"if direction=LEFT: ..."  to "if direction is Direction.LEFT: ...")

There is no need for increased verbosity, as Enums support __eq__ as well:

class Direction(Enum):
    LEFT = 1
    RIGHT = 2
    UP = 3
    DOWN = 4

globals.update(Direction.__members__)

direction = ...

if direction == LEFT:
   ...


For external constants, some thought needs to be given to:
* is the current API working just fine (i.e. decimal's ROUND_DOWN)

just fine?  or working great?

* will enums break doctests or any existing user code

doctests rely on repr's, don't they? Then yes. User code? I would think only if the user was relying on a repr or str of the value. At any rate, that's why this isn't going in until 3.4.

* will it complicate users converting from Python 2

I would hope it would simplify; I'll backport a 2.x version, though, so anyone 
interested can play with it.

* do users now have to learn an additional concept

I don't think enumerations would be a new concept to a computer programmer.

* does it complicate the module in any way

A little bit of setup at the top, but then it should be easier everywhere else.


I'm hoping that enums get used only in cases where they
clearly improve the public API (i.e. cases such as sockets
that have a large number of integer constants) rather
than having a frenzy of every constant, everywhere getting
turned into an enum.

I would like to see enums used as tool for managing complexity,
rather than becoming a cause of added complexity by being used
for every problem, the tall and small, even where it is not needed at all.

I will certainly ask for advice on which modules to spend my time on. I know enums are not a cure-all, but they are great for debugging and interactive work. I don't know about you, but I sure spend a lot of time in those two places.

--
~Ethan~
_______________________________________________
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

Reply via email to