In Python 2.5, the following code raises a TypeError:
>>> class X: def a(self): print 'a' >>> class Y(X): def a(self): super(Y,self).a() print 'b' >>> c = Y() >>> c.a() Traceback (most recent call last): File '<stdin>', line 1, in <module> File '<stdin>', line 3, in a TypeError: super() argument 1 must be type, not classobj
If I replace the class X with class X(object), it will work. What’s the explanation for this?
The reason is that
super()only operates on new-style classes, which in the 2.x series means extending fromobject: