0

I want my class Parents(Mom, Dad) to inheritance init attributes from two previous classes so then my input will require me to write mom_name and dad_name. Can someone suggest me how to do this?

class Mom(object):
    def __init__(self, mom_name):
        self.mom_name = mom_name

class Dad(object):
    def __init__(self, dad_name):
        self.dad_name = dad_name

class Parents(Mom, Dad):
    pass

par = Parents('Mom', 'Dad')
print(par.mom_name)
print(par.dad_name)
Alex Gel
  • 27
  • 4
  • 1
    Both your parent classes need to call `super()`. – Daniel Roseman Nov 04 '19 at 12:45
  • Possible duplicate of [Python - Calling \_\_init\_\_ for multiple parent classes](https://stackoverflow.com/questions/39415085/python-calling-init-for-multiple-parent-classes) – gstukelj Nov 04 '19 at 12:50

2 Answers2

4

you can implement it this way

class Mom(object):
    def __init__(self, mom_name):
        self.mom_name = mom_name

class Dad(object):
    def __init__(self, dad_name):
        self.dad_name = dad_name

class Parents(Mom, Dad):
    def __init__(self, mom_name, dad_name):
        Mom.__init__(self, mom_name)
        Dad.__init__(self,dad_name)

par = Parents('Mom', 'Dad')
print(par.mom_name)
print(par.dad_name)

output

Mom
Dad
sahasrara62
  • 10,069
  • 3
  • 29
  • 44
1

Like this.


class Parents(Mom, Dad):

     def __init__(self, mom_name, dad_name):
         super(Mom, self).__init__(mom_name)
         super(Dad, self).__init__(dad_name)

Edit 1 :

The code above doesn't work, a suitable way will be to subclass Dad from Mum and then paste it to parents like this.

class Mom(object):
    def __init__(self, mom_name):
        self.mom_name = mom_name

class Dad(Mom):
    def __init__(self, dad_name, **kw):
        self.dad_name = dad_name
        super(Dad, self).__init__(**kw)

class Parents(Dad):

    def __init__(self, mom_name, dad_name):
        super(Parents, self).__init__(mom_name=mom_name, dad_name=dad_name)

p = Parents("mumy", "dady")       
print(p.mom_name)
print(p.dad_name)
Florian Bernard
  • 2,561
  • 1
  • 9
  • 22