Why nested scope rules do not apply to inner Class?

Calvin Spealman ironfroggy at gmail.com
Tue Aug 12 19:33:19 CEST 2008

Please re-evaluate your "need" for nesting classes in the first place.

On Tue, Aug 12, 2008 at 1:06 PM, Cousson, Benoit <b-cousson at ti.com> wrote:
>> This is a language limitation.
>> This is because nested scope is implemented for python function only since
>> 2.3
>> allow late binding of free variables. the scope in class statment is not a
>> closure, so there is only two possible scope in it : local and global.
> That was my understanding as well, but I think it is a pity to have that limitation. Don't you think that the same improvement that was done for method nested scope could be done as well for nested class?
> I can easily fix my current issue by doing the binding after the class declaration.
> My concern is more about the lack of symmetry of that approach; meaning that if both classes are in the global scope, one can access the others, whereas if they are in the body of another class they cannot.
> This is OK:
> class A(object):
>        pass
> class B(object):
>        foo=A
> I have to add the binding after the declaration in the case of nested:
> class C(object):
>        class A(object):
>                pass
>        class B(object):
>                foo=None
>        B.foo = A
> That extra step is a little bit painful and should not be necessary for my point of view.
>> > I'm wondering as well if the new nonlocal statement will fix that in
>> py3k?
>> >
>> nonlocal doesn't adress this issue an I doubt python 3.0 fix it at all.
>> You have the same problem with generator expressions, which bind lately
>> outer
>> loop variables :
> Good to know, I was not aware of that.
> Thanks,
> Benoit
> --
> http://mail.python.org/mailman/listinfo/python-list

Read my blog! I depend on your acceptance of my opinion! I am interesting!
Follow me if you're into that sort of thing: http://www.twitter.com/ironfroggy

More information about the Python-list mailing list