Python混乱中的多重继承

时间:2020-06-27 07:43:54

标签: python python-3.x multiple-inheritance python-class

我有以下代码实现多重继承。我希望调用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 个答案:

答案 0 :(得分:2)

super的调用将子类作为其第一个参数,而不是基类。你应该在做

super(child, self).__init__()

但是,从python 3.0开始,您可以轻松做到

super().__init__()

但这如何发挥多重继承作用?好吧,这在this answer

中有很好的解释

根据您的情况,基本上,将super更改为适当的调用将产生base1类的__init__调用。根据MRO(方法解析顺序)。

如果您要调用__init__中的base2怎么办?那么,您正在考虑直接在这种情况下调用base2.__init__(),或者只是更改继承顺序。

class child(base2, base1):
    def __init__(self):
        super().__init__()

现在,这将打印base2类的__init__方法