[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


hope this helps!


More information about the Python-Dev mailing list