我有以下代码实现多重继承。我希望调用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()
答案 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__
方法