New submission from levkivskyi:

The documentation on execution model 
https://docs.python.org/3/reference/executionmodel.html contains the statement
"""
A class definition is an executable statement that may use and define names. 
These references follow the normal rules for name resolution. The namespace of 
the class definition becomes the attribute dictionary of the class. Names 
defined at the class scope are not visible in methods.
"""
However, the following code (taken from 
http://lackingrhoticity.blogspot.ch/2008/08/4-python-variable-binding-oddities.html):

x = "xtop"
y = "ytop"
def func():
    x = "xlocal"
    y = "ylocal"
    class C:
        print(x)
        print(y)
        y = 1
func()

prints

xlocal
ytop

In case of "normal rules for name resolution" it should rise UnboundLocalError.

I suggest replacing the mentioned statement with the following:
"""
A class definition is an executable statement that may use and define names. 
Free variables follow the normal rules for name resolution, bound variables are 
looked up in the global namespace. The namespace of the class definition 
becomes the attribute dictionary of the class. Names defined at the class scope 
are not visible in methods.
"""
or a similar one.

----------
assignee: docs@python
components: Documentation
messages: 242619
nosy: docs@python, levkivskyi
priority: normal
severity: normal
status: open
title: Incorrect (misleading) statement in the execution model documentation
type: behavior
versions: Python 3.4, Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue24129>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to