Martin Maly wrote:
I came across a case which I am not sure if by design or a bug in Python (Python 2.4.1 (#65, Mar 30 2005, 09:13:57)). Consider following Python module:
# module begin "module doc"
class c: print __doc__ __doc__ = "class doc" (1) print __doc__
print c.__doc__ # module end
When ran, it prints:
module doc class doc class doc
Based on the binding rules described in the Python documentation, I would expect the code to throw because binding created on the line (1) is local to the class block and all the other __doc__ uses should reference that binding. Apparently, it is not the case.
Is this bug in Python or are __doc__ strings in classes subject to some additional rules?
it's not limited to __doc__ strings, or, for that matter, to attributes:
spam = "spam"
class c: print spam spam = "bacon" print spam
def len(self): return 10
the language reference uses the term "local scope" for both class and def-statements, but it's not really the same thing. the former is more like a temporary extra global scope with a (class, global) search path, names are resolved when they are found (just as in the global scope); there's no preprocessing step.
for additional class issues, see the "Discussion" in the nested scopes PEP:
hope this helps!