Nick Coghlan <ncogh...@gmail.com> added the comment:

Note that this isn't about the __class__ reference itself - that would still be 
a closure cell.

This issue is about the fact that since Python 3.6, type.__new__ has handled 
calling __set_name__ on all the descriptors, so __build_class__ needs a way to 
pass the cell over to type.__new__.

Currently, the channel for that is the class body execution namespace itself, 
which created a new requirement for metaclasses to ensure that the 
"__classcell__" entry actually makes it all the way to "type.__new__". Django 
at least had to make changes to account for that, and it's mildly disappointing 
to be imposing that requirement on library and framework authors solely because 
of a technical limitation in CPython.

Even without context chaining, it seems to me that nesting of class definitions 
could be handled by making the context variable a list of cell objects and 
having type.__new__ look at the final entry rather than the whole thing.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue33179>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to