How to correctly call base class methods (and constructor) from inherited classes in Python? [duplicate]
That is correct. Note that you can also call the __init__
method directly on the Base
class, like so:
class Child(Base):
def __init__(self, something_else):
Base.__init__(self, value = 20)
self.something_else = something_else
That's the way I generally do it. But it's discouraged, because it doesn't behave very well in the presence of multiple inheritance. Of course, multiple inheritance has all sorts of odd effects of its own, and so I avoid it like the plague.
In general, if the classes you're inheriting from use super
, you need to as well.
If you're using Python 3.1, super is new and improved. It figures out the class and instance arguments for you. So you should call super without arguments:
class Child(Base):
def __init__(self, value, something_else):
super().__init__(value)
self.something_else = something_else
...
Yes, that's correct. If you wanted to be able to pass value
into the Child
class you could do it this way
class Child(Base):
def __init__(self, value, something_else):
super(Child, self).__init__(value)
self.something_else = something_else
...