On Fri, Jan 16, 2009 at 2:12 PM, Terry Reedy <tjre...@udel.edu> wrote: > > I do not understand. You know it is going to run the .__init__ of its one > and only base class, which here is object.
Because this class might be used as base of another class. Take this trivial example code (in py2.6): class A(object): def __init__(self, a): #super(A, self).__init__(a) self.a = a print "A" class B(object): def __init__(self, a): #super(B, self).__init__(a) self.b = a print "B" class C(A, B): def __init__(self, a): super(C, self).__init__(a) self.c = a print "C", dir(self) C(1) Running the last line shows that A's constructor got called, but not B's constructor. The only way to make sure all __init__s are called in this example is by doing class A(object): def __init__(self, a): super(A, self).__init__(a) self.a = a print "A" class B(object): def __init__(self, a): #super(B, self).__init__(a) self.b = a print "B" class C(A, B): def __init__(self, a): super(C, self).__init__(a) self.c = a print "C", dir(self) C(1) which is really ugly (as in, why is B's call to super.__init__ commented but not A's, if A and B are otherwise identical?) I'm not sure, but I think the proper behavior for object.__init__ should be ignoring all args. -- - Alexandre _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com