Chris Mellon wrote: > I see super documented, and in use, as below (from the Python documentation) > > class C(B): > def meth(self, arg): > super(C, self).meth(arg) > > I'd like to not write C all the time, so is there any problem with writing: > > class C(B): > def meth(self, arg): > super(type(self), self).meth(arg) > > > This seems to work in practice but I don't see it used anywhere and > I'm worried what I might be missing. > > This was especially brought to my attention because pylint flags the > second usage as invalid, and I'm not sure if it should be considered a > false positive or not.
PyLint is right. Try running this: class A(object): def meth(self,arg): print "hello" class B(A): def meth(self,arg): super(type(self), self).meth(arg) class C(B): def meth(self,arg): super(type(self), self).meth(arg) print C().meth(1) The reason this type(self) returns the type of the object (which doesn't change), NOT the type of the class it was defined in. That is, type(self) returns C even in the function B.meth. Since C's superclass is B, B.meth ends up calling B.meth again, and you get infinite recursion. Unfortunately, short of hackery, you're stuck with having to write out super(C,self). Carl Banks -- http://mail.python.org/mailman/listinfo/python-list