首页 > 解决方案 > 这种多重继承有什么问题?

问题描述

class A:

    def __init__(self,name):
        self.name=name

class B(A):

    def __init__(self,name,add):
        super().__init__(name)
        self.add = add

class C(A):

    def __init__(self,name,tel):
        super().__init__(name)
        self.tel = tel

class D(B,C):

    def __init__(self,name,add,tel,company):
        super().__init__(name,add)
        super().__init__(name,tel)
        self.company = company

d = D('Hank','ctm',55514,'google')

在此处输入图像描述

标签: pythonmultiple-inheritancediamond-problem

解决方案


该错误是由对super().__init__(name)类中的调用引起的B。与 Java 等单继承语言不同,super()Python 并不一定会给你超类。它为您提供方法解析顺序中的下一个类。班级的 MROD是这样的:

>>> D.__mro__
(<class '__main__.D'>,
 <class '__main__.B'>,
 <class '__main__.C'>,
 <class '__main__.A'>,
 <class 'object'>)

如您所见,MRO 中的下一个类BC,因此调用super().__init__(name)调用C.__init__时使用单个参数。但是,该C.__init__方法需要两个参数,因此仅使用一个参数调用它会导致您看到的错误。


推荐阅读