Re: [Python-Dev] Unbound locals in class scopes

2015年6月20日 09:14:37 -0700

On 06/20/2015 02:51 AM, Ivan Levkivskyi wrote:
Hello,
There appeared a question in the discussion on
http://bugs.python.org/issue24129 about documenting the behavior that
unbound local variables in a class definition do not follow the normal rules.
Guido said 13 years ago that this behavior should not be changed:
https://mail.python.org/pipermail/python-dev/2002-April/023428.html,
however, things changed a bit in Python 3.4 with the introduction of the
LOAD_CLASSDEREF opcode. I just wanted to double-check whether it is still a
desired/expected behavior.
Guido's comment still stands as far as references inside methods work in regards to the class body. (they must use a self name to access the class name space.) But the execution of the class body does use lexical scope, otherwise it would print xtop instead of xlocal here.
x = "xtop"
y = "ytop"
def func():
 x = "xlocal"
 y = "ylocal"
 class C:
 print(x)
 print(y)
 y = 1
func()
prints
xlocal
ytop
Maybe a better way to put this is, should the above be the same as this?
>>> x = "xtop"
>>> y = "ytop"
>>> def func():
... x = "xlocal"
... y = "ylocal"
... def _C():
... print(x)
... print(y)
... y = 1
... return locals()
... C = type("C", (), _C())
...
>>> func()
xlocal
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
 File "<stdin>", line 9, in func
 File "<stdin>", line 6, in _C
UnboundLocalError: local variable 'y' referenced before assignment
I think yes, but I'm not sure how it may be different in other ways.
Cheers,
 Ron
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to