[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

AltStyle によって変換されたページ (->オリジナル) /