On Fri, Jan 16, 2009 at 2:12 PM, Terry Reedy <tjreedy at 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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4