[Python-Dev] class name spaces inside an outer function (original) (raw)
Nick Coghlan ncoghlan at gmail.com
Sun Apr 28 05:23:54 CEST 2013
- Previous message: [Python-Dev] class name spaces inside an outer function
- Next message: [Python-Dev] class name spaces inside an outer function
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Sun, Apr 28, 2013 at 11:38 AM, Benjamin Peterson <benjamin at python.org> wrote:
2013/4/27 Nick Coghlan <ncoghlan at gmail.com>:
On 28 Apr 2013 04:30, "Ethan Furman" <ethan at stoneleaf.us> wrote:
I filed bug http://bugs.python.org/issue17853 last night. If somebody could point me in the right direction (mainly which files to look in), I'd be happy to attempt a patch. Hmm, interesting challenge. A key part of the problem is that the 3.x compiler assumes there's no way to inject names it doesn't know about into code inside a function - we missed the fact that you could still do it with a nested class and a metaclass prepare method. That's not the problem. You can't inject names dynamically into a function scope with variables in a class scope, since nothing closes over them.
Yeah, what I wrote didn't quite capture what I meant:
- in Python 2.x, using LOAD_DEREF when a nested class body references a lexically scoped name is correct
- in Python 3.x, it is no longer correct, because prepare may inject additional names that the compiler doesn't know about
Previously, the compiler new just as much about the nested class namespaces as it did about the function locals.
Cheers, Nick.
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message: [Python-Dev] class name spaces inside an outer function
- Next message: [Python-Dev] class name spaces inside an outer function
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]