Alex Rivera | Logout

Why aren't superclass __init__ methods automatically invoked?

Asked 2010-09-23T21:56:12.800
195

Why did the Python designers decide that subclasses' __init__() methods don't automatically call the __init__() methods of their superclasses, as in some other languages? Is the Pythonic and recommended idiom really like the following?

class Superclass(object):
    def __init__(self):
        print 'Do something'

class Subclass(Superclass):
    def __init__(self):
        super(Subclass, self).__init__()
        print 'Do something else'
Edit
Report

3 Answers

11

"Explicit is better than implicit." It's the same reasoning that indicates we should explicitly write 'self'.

I think in in the end it is a benefit-- can you recite all of the rules Java has regarding calling superclasses' constructors?

answered 2010-09-23T21:59:08.550
7

Often the subclass has extra parameters which can't be passed to the superclass.

answered 2010-09-23T22:00:32.753
2

i believe the one very important consideration here is that with an automatic call to super.__init__(), you proscribe, by design, when that initialization method is called, and with what arguments. eschewing automatically calling it, and requiring the programmer to explicitly do that call, entails a lot of flexibility.

after all, just because class B is derived from class A does not mean A.__init__() can or should be called with the same arguments as B.__init__(). making the call explicit means a programmer can have e.g. define B.__init__() with completely different parameters, do some computation with that data, call A.__init__() with arguments as appropriate for that method, and then do some postprocessing. this kind of flexibility would be awkward to attain if A.__init__() would be called from B.__init__() implicitly, either before B.__init__() executes or right after it.

answered 2010-09-24T00:17:26.303

Your Answer