Duncan Booth wrote:
Lie Ryan <lie.1...@gmail.com> wrote:

Terry Reedy wrote:
Lie Ryan wrote:

Note that when the python interpreter meets this statement:

class B(P): def foo(self): print('ab') X = 'f'

the compiler sees a class statement -> create a new blank class
 -> assign P as the new class' parent
No, it saves the name 'B' and bases tuple P, and create a new
*dict*, call it d here though it is anonymous as far as the class
body is concerned.
Neat, I'd never thought that it creates the ".__dict__" before the class itself.

It has to be that way: some of the internal methods cannot be
modified after the initial creation of the class, so you need to use
a namespace that exists before the class itself exists.

The situation changes slightly in Python 3 where the metaclass can
hook into the creation of the dict and instead create any kind of
object which exposes a dict-like interface. That opens the door to
classes where the order in which the order attributes are defined is
significant or even where you can give multiple definitions for the
same attribute (e.g. to support overloaded methods).

The documentation for this, with an example, is in RefMan 3.3.3,
Customizing Class Creation. See the metaclass .__prepare__ method.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to