Search code examples
pythonmultiple-inheritanceinitsupernew-style-class

calling init for multiple parent classes with super?


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__()

Solution

  • Invocation via super doesn't call all the parents, it calls the next function in the MRO chain. For this to work properly, you need to use super in all of the __init__s:

    class Parent1(object):
        def __init__(self):
            super(Parent1, self).__init__()
            self.var1 = 1
    
    class Parent2(object):
        def __init__(self):
            super(Parent2, self).__init__()
            self.var2 = 2
    
    class Child(Parent1, Parent2):
        def __init__(self):
            super(Child, self).__init__()
    

    In Python 3, you can use super() instead of super(type, instance).