多重继承中不同签名的 super() 初始化

0 投票
1 回答
38 浏览
提问于 2025-04-13 19:01

假设我们有两个类,第一个类的构造函数需要两个参数,第二个类的构造函数需要一个参数,它们各自都有自己的初始化方式。现在我想创建一个第三个类,这个类要同时继承这两个类,并且共享它们的初始化。以下是我的尝试:

class SuperClass1:
    def __init__(self,x,y):
        self.x =x
        self.y =y


class SuperClass2:
    def __init__(self,z):
        self.z =z/2


class Derived(SuperClass1, SuperClass2):
    def __init__(self,x,y,z):
        super().__init__(x,y)
        super(SuperClass2).__init__(z)

d1 = Derived(10,11,12)
print(d1.x, d1.y, d1.z)
# d1 = Derived()
# d1.info()

但是当我运行的时候,出现了以下错误:

TypeError: super() argument 1 must be type, not int

我自己也在学习和实验,请问这样做是否可行?

编辑:所以你是说像这样吗?

class Derived(SuperClass1, SuperClass2):
    def __init__(self,x,y,z):
        super().__init__(x,y)
        super(SuperClass1, self).__init__(z)
d1 =Derived(10,11,12)
print(d1.x,d1.y,d1.z)

1 个回答

2

你可以像下面这样修改派生类:

class Derived(SuperClass1, SuperClass2):
    def __init__(self,x,y,z):
        SuperClass1.__init__(self,x,y)
        SuperClass2.__init__(self,z)

参考链接:Python的多重继承:选择调用哪个super()

撰写回答