Xavier Morel <[EMAIL PROTECTED]> writes: > Pierre Barbier de Reuille wrote: >> Well, I would even add : don't use super ! >> Just call the superclass method : >> MyClass.__init__(self) >> Simon Percivall a écrit : >>> Don't use self.__class__, use the name of the class. > Bad idea if you're using new-style classes with a complex inheritance > hierarchy and multiple inheritance.
To quote the original code: class MyClass(MyBaseClass) def __init__(self) super(self.__class__, self).__init__() self.type = MyClassType return self class MySpecialClass(MyClass) def __init__(self) super(self.__class__, self).__init__() self.type = MySpecialClassType return self The only place it uses self.__class__ is in the calls to super. Super finds the superclass of it's first argument. If that argument is self.__class__, then super will always return the superclass of the class of self, *not* the superclass of the class who's code is being run. That's why the code resuls in an infinite recursion. And a note to the OP: __init__'s return value is ignored. You should delete the "return self" from your methods. <mike -- Mike Meyer <[EMAIL PROTECTED]> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. -- http://mail.python.org/mailman/listinfo/python-list