On Tuesday 05 July 2016 13:47, Chris Angelico wrote: > On Tue, Jul 5, 2016 at 1:35 PM, Steven D'Aprano <st...@pearwood.info> wrote: >>> If you push your code into a separate .py file, you can reference the >>> original module by importing it. Is that also the normal way to use >>> "outer" functions etc from inside a namespace? >> >> Good question! >> >> With the current implementation, importing should work, but it's not >> necessary. The surrounding module (the real .py module) is inserted into >> the name resolution path of functions: >> >> py> x = 999 >> py> @namespace.Namespace >> ... class Test: >> ... def test(): >> ... print(x) >> ... >> py> Test.test() >> 999 > > Ah, fascinating. This does break the "just unindent and move to a new > file if you want to break it out" equivalency, but it does make sense > - it's a *nested* namespace, which modules (even in a package) are > not. So you have the outer namespace acting pretty much the way > builtins do. (Do nested namespaces work?)
I haven't got that far, but I expect that nested namespaces will be nested in name only, like nested functions in Python 1.5. There's only so far I can go without support from the compiler. If you nest a class inside another class, the inner class doesn't see variables in the outer class even during construction. So I'm pretty sure my namespace metaclass will inherit the same limitation. -- Steve -- https://mail.python.org/mailman/listinfo/python-list