[Python-Dev] enum discussion: can someone please summarize open issues? (original) (raw)

Ethan Furman ethan at stoneleaf.us
Mon Apr 29 06:02:15 CEST 2013


[re-directing back to python-dev]

On 04/28/2013 08:42 PM, Davis Silverman wrote:

as a not super experienced python developer, when i see Season('AUTUMN') it looks like im creating an a Season object. I understand your resoning, that it acts like a boolean singleton, however, i feel it would confuse many, and isn't worth it. From what i see, its meant to be a lookup sort of thing, but it doesnt really feel like one.

Or am i completely wrong about something?

As far as you are concerned, you are creating a Season object. That it happens to be a pre-existing Season object is an implementation detail, and the whole thing would work just as well if it did indeed create a brand new object (you couldn't use is then, but in general is shouldn't be used anyway and I see no reason why is should be encouraged with Enums; use ==).

Two examples:

Since is is discouraged, both of those cases could go the other way (always creating a brand new object) and properly written programs would continue to run just fine -- slower, but fine.

Enums are the same: they could return brand new instances every time, and programs using == to compare will keep on working. That they don't is an implementation detail.

The real guarantee with enums is that once you have one created you'll only ever see the original values; so

class Last(Enum): X = 1 Y = 2 Z = 3

will only have three possible elements, X, Y, and Z, and X will always have the value of 1, Y will always have the vale of 2, and Z will always have the value of 3. If you try and get Last("W") you'll trigger an exception, just like you do with int("house").

-- Ethan



More information about the Python-Dev mailing list