This is not related to super . You do not explicitly define __init__ for SecondClass , but since it inherits from FirstClass , it inherits FirstClass __init__ . Thus, you cannot create an object without going to the value parameter.
Change OK. The first point, as others have noted, is that you should always use the current class in your super call, not the super class โ in this case, super(SecondClass, self) . This is because super means "get the parent class of class x," so obviously you mean "get the parent of SecondClass" - this is FirstClass.
The second point is that it makes no sense to call the __init__ method inside meth . __init__ already called when the object is created. Or your subclass defines its own version, which can choose whether to call its own method super; or, as in this case, this is not the case, in which case the version of the superclass is called automatically.
Let me repeat, because I suspect that this is the missing part in your understanding: the whole point of the subclass is that everything that you do not specifically redefine is inherited in any case. super is only for when you want to redefine something, but use logic from the superclass anyway.
So here is a stupid example:
class FirstClass(object): def __init__ (self, value="I am the value from FirstClass"): print value def meth(self): print "I am meth from FirstClass" def meth2(self): print "I am meth2 from FirstClass" class SecondClass(FirstClass): def __init__ (self): print "I am in SecondClass" super(SecondClass, self).__init__(value="I am the value from SecondClass") def meth(self): print "I am meth from SecondClass" a=FirstClass()
source share