Множественное наследование в путанице 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__ метод

Другие вопросы по тегам