[Python-Dev] __doc__ behavior in class definitions
Fredrik Lundh
fredrik at pythonware.com
Fri Oct 7 22:18:14 CEST 2005
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
print len(spam)
def len(self):
return 10
print c.spam
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:
http://www.python.org/peps/pep-0227.html
hope this helps!
</F>
More information about the Python-Dev
mailing list