On Tue, Feb 26, 2019 at 5:06 PM Gregory Ewing <greg.ew...@canterbury.ac.nz> wrote: > > Chris Angelico wrote: > > Classes and functions behave differently. Inside a function, a name is > > local if it's ever assigned to; but in a class, this is not the case. > > Actually, it is. Assigning to a name in a class body makes it part > of the class namespace, which is the local namespace at the time > the class body is executed.
The significant part here is "ever". Consider: >>> x = 1 >>> def f(): ... print(x) ... x = 2 ... print(x) ... >>> f() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in f UnboundLocalError: local variable 'x' referenced before assignment >>> class X: ... print(x) ... x = 2 ... print(x) ... 1 2 >>> In the function, since x *is* assigned to at some point, it is deemed a local name, which means that referencing it bombs. In the class, that isn't the case; until it is actually assigned to, it isn't part of the class's namespace, so the global is visible. So, yes, it's a difference between function namespaces and other namespaces (modules work the same way as classes). ChrisA -- https://mail.python.org/mailman/listinfo/python-list