As well as all the other reasons already stated, it allows for easier access to overridden methods; you can call Class.some_method(inst)
.
An example of where it’s useful:
class C1(object): def __init__(self): print "C1 init"class C2(C1): def __init__(self): #overrides C1.__init__ print "C2 init" C1.__init__(self) #but we still want C1 to init the class too
>>> C2()"C2 init""C1 init"