[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
- Previous message (by thread): [Python-Dev] PEP520 and absence of __definition_order__
- Next message (by thread): [Python-Dev] PEP520 and absence of __definition_order__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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
- Previous message (by thread): [Python-Dev] PEP520 and absence of __definition_order__
- Next message (by thread): [Python-Dev] PEP520 and absence of __definition_order__
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]