Супер с аргументами в случае множественного наследования

У меня есть класс, который наследуется от двух других классов, чьи __init__ принимают оба параметра следующим образом:

class A(object):
    def __init__(self, a):
        self.a = a

class B(object):
    def __init__(self, b):
        self.b = b

class C(A, B):
    def __init__(self, a, b):
        super(C, self).__init__(a, b)

c = ClassC(1, 2)

Это дает TypeError: __init__() takes exactly 2 arguments (3 given).

При установке b в B фиксированного значения и передаче только 1 параметра в super попытка доступа к b в C дает AttributeError: 'ClassC' object has no attribute 'b':

class A(object):
    def __init__(self, a):
        self.a = a

class B(object):
    def __init__(self, b):
        self.b = 2

class C(A, B):
    def __init__(self, a, b):
        super(C, self).__init__(a)

        print self.a
        print self.b

c = ClassC(1, 2)

При вызове __init__ вручную все вроде нормально:

class A(object):
    def __init__(self, a):
        self.a = a

class B(object):
    def __init__(self, b):
        self.b = b

class C(A, B):
    def __init__(self, a, b):
        A.__init__(a)
        B.__init__(b)

        print self.a
        print self.b

c = ClassC(1, 2)

Итак, как я могу получить это наследование прямо и как я могу управлять параметрами для __init__ унаследованных классов при использовании super? Это вообще возможно? Как super узнает, какие параметры должны передаваться какому классу?


person a_guest    schedule 27.02.2015    source источник
comment
Вам нужны вызовы super в других классах: супер!   -  person Ashwini Chaudhary    schedule 27.02.2015
comment
Связано: Является ли __init__ методом класса?   -  person Ashwini Chaudhary    schedule 27.02.2015
comment
Возможные дубликаты com/questions/3277367/ и stackoverflow.com/questions/14206015/   -  person Nikos M.    schedule 27.02.2015