[Python-Dev] PEP520 and absence of definition_order (original) (raw)

Victor Stinner victor.stinner at gmail.com
Sun Sep 11 04:55:00 EDT 2016


2016-09-10 3:49 GMT-04:00 Ethan Furman <ethan at stoneleaf.us>:

With definitionorder Enum can display the actual creation order of enum members and methods, while relying on Enum.dict.keys() presents a jumbled mess with many attributes the user never wrote, the enum members either appearing /after/ all the methods (even if actually written before), or entirely absent.

Python 3.5 also returns methods in Enum.dict(). So it would be a new feature, right?

The use case seems to be specific to Enum. Can't you add a new method which only returns members (ordered by insertion order)?

list(myenum._member_maps.keys()) returns members, sorted by insertion order. Is it what you want?

Code:

import enum

class Color(enum.Enum): red = 1 blue = red green = 2

print(Color.dict.keys()) print(list(Color.member_map.keys()))

Python 3.5:

dict_keys(['module', 'member_names', 'green', 'member_type', 'blue', 'value2member_map', 'member_map', 'new', 'red', 'doc']) ['red', 'blue', 'green']

Python 3.6:

dict_keys(['generate_next_value', 'module', 'doc', 'member_names', 'member_map', 'member_type', 'value2member_map', 'red', 'blue', 'green', 'new']) ['red', 'blue', 'green']

Note: It seems like dir(myenum) ignores "aliases" like blue=red in my example.

Victor



More information about the Python-Dev mailing list