Python inheritance - calling base class methods inside child class?
base-class, class, inheritance, overwrite, python
Solution
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)
Problem
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?