baffled classes within a function namespace. Evaluation order.
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Fri Apr 26 02:21:53 EDT 2013
On Fri, 26 Apr 2013 07:39:32 +0200, Peter Otten wrote:
> A class body is basically a function body that is executed once. To
> allow an assignment
>
>>>> x = 42
>>>> class A:
> ... x = x
> ...
>
> which is not possible inside a function
As far as I can tell, the documentation says that this assignment should
also be impossible inside a class. Unless I'm missing something, I think
this is a bug.
http://docs.python.org/3/reference/executionmodel.html
[...]
> However, while the above gives some technical background it doesn't
> explain why this scheme was chosen. My guess is that when Python got
> closures nobody was willing to do the extra work to make class bodies
> namespace-aware. The alternative, disallowing x = x in classes, would
> have seriously broken backwards-compatibility.
Not so. x = x was not allowed in classes before there were closures:
[steve at ando ~]$ python1.5
Python 1.5.2 (#1, Aug 27 2012, 09:09:18) [GCC 4.1.2 20080704 (Red Hat
4.1.2-52)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>
>>>
>>> def f():
... x = 1
... class Test:
... x = x
... return Test
...
>>> T = f()
Traceback (innermost last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in f
File "<stdin>", line 4, in Test
NameError: x
--
Steven
More information about the Python-list
mailing list