Python inheritance - calling base class methods inside child class?

user1369281 picture user1369281 · May 2, 2012 · Viewed 24.9k times · Source

It baffles me how I can't find a clear explanation of this anywhere. Why and when do you need to call the method of the base class inside the same-name method of the child class?

class Child(Base):
    def __init__(self):
        Base.__init__(self)

    def somefunc(self):
        Base.somefunc(self)

I'm guessing you do this when you don't want to completely overwrite the method in the base class. is that really all there is to it?

Answer

Joel Cornett picture Joel Cornett · May 2, 2012

Usually, you do this when you want to extend the functionality by modifiying, but not completely replacing a base class method. defaultdict is a good example of this:

class DefaultDict(dict):
    def __init__(self, default):
        self.default = default
        dict.__init__(self)

    def __getitem__(self, key):
        try:
            return dict.__getitem__(self, key)
        except KeyError:
            result = self[key] = self.default()
            return result

Note that the appropriate way to do this is to use super instead of directly calling the base class. Like so:

class BlahBlah(someObject, someOtherObject):
    def __init__(self, *args, **kwargs):
        #do custom stuff
        super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)