Множественное наследование в путанице Python
У меня есть следующий фрагмент кода, реализующий множественное наследование. Я жду звонкаsuper(base2,self).__init__()
печатать --> "Printing from base2".
Но программа ничего не печатает; ни он не вызывает ошибку.
class base1:
def __init__(self):
print("printing from base1")
def method(self,val):
print("From method of base1", val)
class base2:
def __init__(self):
print("printing from base2")
def method(self,val):
print("From method of base2", val)
class child(base1, base2):
def __init__(self):
super(base2,self).__init__() #is not working as expected
x = child()
1 ответ
Призыв к super
ожидает в качестве первого параметра дочерний класс, а не базовый класс. Ты должен делать
super(child, self).__init__()
Однако, начиная с python 3.0, вы можете просто сделать
super().__init__()
Но как это влияет на множественное наследование? Что ж, это очень хорошо объяснено в этом ответе
В принципе, в вашем случае изменение super
к соответствующему вызову даст base1
класс' __init__
вызов. Согласно MRO (порядок разрешения метода).
Что, если вы хотите вызвать __init__
из base2
? Ну, ты собираешься напрямую звонитьbase2.__init__()
в этом случае или просто изменение порядка наследования.
class child(base2, base1):
def __init__(self):
super().__init__()
Теперь это напечатает base2
класс' __init__
метод