On 09/11/2016 01:55 AM, Victor Stinner wrote:
2016-09-10 3:49 GMT-04:00 Ethan Furman wrote:
With __definition_order__ 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?
__definition_order__ is (would be) a new feature, yes.
The use case seems to be specific to Enum. Can't you add a new method
which only returns members (ordered by insertion order)?
The use case is specific to any custom metaclass that does more than enhance
the attributes and/or methods already in the class body.
list(myenum._member_maps.keys()) returns members, sorted by insertion
order. Is it what you want?
That only includes members, not other attributes nor methods. What I want is
to make sure the other points of PEP 520 are not forgotten about, and that Enum
conforms to the accepted PEP.
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.
That is intentional.
--
~Ethan~
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com