Closed
Description
Given the enum:
class Colours(Enum):
RED = 1
In Python 3.9 and 3.10:
>>> Colours.__dict__["RED"] is Colours.RED
True
>>> Colours.RED.RED
<Colours.RED: 1>
In Python 3.11:
>>> Colours.__dict__["RED"] is Colours.RED
False
>>> Colours.RED.RED
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/mark/repos/cpython/Lib/enum.py", line 198, in __get__
raise AttributeError(
^^^^^^^^^^^^^^^^^^^^^
AttributeError: <enum 'Colours'> member has no attribute 'RED'
While these might seem like minor semantic changes, there is also a large performance impact.
Lookup of Colours.RED
is simple and efficient in 3.10, but involves a lot of indirection and dispatching through the enum.property
class in 3.11.
The performance impact is likely to get worse in 3.12, as we optimize more kinds of attributes.
Introduced in c314e60, I believe.
Linked PRs
Metadata
Metadata
Assignees
Projects
Status
Done