New submission from Robert Gomułka: Enum module handles "name" member incorrectly. 1. "name" can't be used as a member when decorated with unique:
>>> import enum >>> @enum.unique ... class A(enum.IntEnum): ... a = 1 ... name = 2 ... Traceback (most recent call last): File "<stdin>", line 2, in <module> File "C:\Python27\Lib\site-packages\enum\__init__.py", line 835, in unique (enumeration, duplicate_names) ValueError: duplicate names found in <enum 'A'>: a -> A.name, name -> A.name 2. Without unique the names are assigned incorrectly: >>> class A(enum.IntEnum): ... a = 1 ... name = 2 ... >>> A.__members__['a'].name <A.name: 2> >>> A.__members__['name'].name <A.name: 2> (Just for reference - spotted first on Python 2.7 + enum34 backports) The same happens for value property, making the bug quite severe: >>> class A(enum.IntEnum): ... a = 1 ... value = 3 ... >>> A.__members__['a'].value <A.value: 3> >>> A.__members__['value'].value <A.value: 3> I believe this comment is related: # _RouteClassAttributeToGetattr is used to provide access to the `name` # and `value` properties of enum members while keeping some measure of # protection from modification, while still allowing for an enumeration # to have members named `name` and `value`. This works because enumeration # members are not set directly on the enum class -- __getattr__ is # used to look them up. Platform: Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:14:34) [MSC v.1900 32 bit (Intel)] on win32 ---------- components: Library (Lib) messages: 303017 nosy: Robert Gomułka priority: normal severity: normal status: open title: Enum doesn't allow name type: behavior versions: Python 3.6 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue31587> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com