Bengt Richter wrote: > BTW, there's something about referring to type(self) by its not > always dependably bound (though usually global) name that bothers me. > > I wonder if the above common use of super could be implemented as a property > of object, > so you'd normally inherit it and be able to write > self.super.__init__(*args, **kwargs) # (maybe spell it > self.__super__.__init__(...) I suppose) > > I.e., self.__super__ would effectively return the equivalent of > super(type(self), self)
This doesn't work: type(self) is always the type of the instantiated (child) class, not the type of the class at whatever level of the class hierarchy the __init__() calls currently have reached. In other words, with these definitions: class A(object): def __init__(self): super(type(self), self).__init__() # does not do what you want class B(A): def __init__(self): super(type(self), self).__init__() # works okay here if you do "b = B()", the first __init__ will work (i.e. B's __init__ will find and call A.__init__), but the next one won't (i.e. A.__init__ will now try calling A.__init__ recursively, giving you an eventual stack overflow). -correcting-bengt-richter-on-such-arcana-is-always-dangerously y'rs, Peter -- http://mail.python.org/mailman/listinfo/python-list