Closed
Description
Bug report
% cat leak.py
def f():
__foo = 1
class X[T]: ...
return __foo
f()
% python3.12 leak.py
Traceback (most recent call last):
File "/Users/jelle/py/cpython/leak.py", line 5, in <module>
f()
File "/Users/jelle/py/cpython/leak.py", line 4, in f
return __foo
^^^^^
NameError: name '_X__foo' is not defined. Did you mean: '__foo'?
The PEP 695 implementation of generic classes turns on name mangling for the type parameter scope, but never turns it off afterwards. As a result, all code that appears syntactically after the PEP 695 scope also gets mangling applied to it.
I have a fix for this, but I believe applying it requires updating the magic number, and I'm not sure we can afford to to do that on the 3.12 branch.