У меня есть три класса: A
, B
и C
.
C
наследуется от A
и B
(в этом порядке). Подписи конструктора A
и B
различны. Как я могу вызвать методы __init__
обоих родительских классов?
Моя работа в коде:
class A(object):
def __init__(self, a, b):
super(A, self).__init__()
print('Init {} with arguments {}'.format(self.__class__.__name__, (a, b)))
class B(object):
def __init__(self, q):
super(B, self).__init__()
print('Init {} with arguments {}'.format(self.__class__.__name__, (q)))
class C(A, B):
def __init__(self):
super(A, self).__init__(1, 2)
super(B, self).__init__(3)
c = C()
дает ошибку:
Traceback (most recent call last):
File "test.py", line 16, in <module>
c = C()
File "test.py", line 13, in __init__
super(A, self).__init__(1, 2)
TypeError: __init__() takes 2 positional arguments but 3 were given
Я нашел этот ресурс, который объясняет множественное наследование с помощью разных наборов аргументов, но они предлагают использовать *args
и **kwargs
для использования для всех аргументов. Я считаю это очень уродливым, так как я не вижу из вызова конструктора в дочернем классе, какие параметры я передаю родительским классам.