多重继承中不同签名的 super() 初始化
假设我们有两个类,第一个类的构造函数需要两个参数,第二个类的构造函数需要一个参数,它们各自都有自己的初始化方式。现在我想创建一个第三个类,这个类要同时继承这两个类,并且共享它们的初始化。以下是我的尝试:
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)