Possible Duplicate:
Can Super deal with multiple inheritance?
Python inheritance? I have a class structure (below), and want the child class to call the __init__
of both parents. Is this possible to do in a 'super' way or is it just a terrible idea?
class Parent1(object):
def __init__(self):
self.var1 = 1
class Parent2(object):
def _init__(self):
self.var2 = 2
class Child(Parent1, Parent2):
def __init__(self):
## call __init__ of Parent1
## call __init__ of Parent2
## super(Child, self).__init__()
The idea of super()
is that you don't have to bother calling both superclasses' __init__()
methods separately -- super()
will take care of it, provided you use it correctly -- see Raymond Hettinger's "Python’s super() considered super!" for an explanation.
That said, I often find the disadvantages of super()
for constructor calls outweighing the advantages. For example, all your constructors need to provide an additional **kwargs
argument, all classes must collaborate, non-collaborating external classes need a wrapper, you have to take care that each constructor parameter name is unique across all your classes, etc.
So more often than not, I think it is easier to explicitly name the base class methods you want to call for constructor calls:
class Child(Parent1, Parent2):
def __init__(self):
Parent1.__init__(self)
Parent2.__init__(self)
I do use super()
for functions that have a guaranteed prototype, like __getattr__()
, though. There are not disadvantages in these cases.