Initialization of base classes

sorry.antispam at address.net sorry.antispam at address.net
Mon Mar 18 16:12:46 EST 2002


On pp 74 of Bealey's excellent book "Python Essential Reference, 2nd
Ed" it is written:

"When an instance is created [of a derived class], the __init__()
methods of base classes are not invoked. Thus, it's up to a derived
class to perform the proper initialization of its base classes, if
necessary"

Is this really true? If you have:

class A:
   def __init__(self):
      print "Class A"

class B:
   def __init__(self):
      print "Class B"

class C(A):
   pass

class D(A, B):
   pass

Then:
w = A() --> "Class A"
x = B() --> "Class B"
y = C() --> "Class A"
z = D() --> "Class A"

Hence, instantiating class C does in fact invoke the constructor of
class A, but not of class B. i.e., only the constructor of the first
base class is invoked. Is this a bug in the book, or a bug in Python
2.1?

And if it's not a Python bug, what is the rationale for only calling
the constructor of the first base class, and not the other base
classes?

...Edmund.



More information about the Python-list mailing list