基类中`super().__init__()`的目的是什么?
我了解 Ifsuper().__init__()在 Python 子类中,它继承了父类的属性。我只是想知道如果我们调用super().__init__()父类本身会怎样,如下所示:
class Base:
def __init__(self,*args,**kwrgs):
super.__init__(args, kwrgs)
super在父类中调用a有什么用?
回答
对于您的问题中的一个简单示例,确实没有意义。它会简单地调用object.__init__which 不会做太多事情并且不接受任何参数。
但是,它与多重继承有所不同。例如,以下代码:
class Base:
def __init__(self, *args, **kwrgs):
super().__init__(*args, **kwrgs)
print("in Base")
class SecondBase:
def __init__(self, *args, **kwrgs):
super().__init__(*args, **kwrgs)
print("in SecondBase")
class A(Base, SecondBase):
def __init__(self, *args, **kwrgs):
super().__init__(*args, **kwrgs)
print("in A")
class B(SecondBase, Base):
def __init__(self, *args, **kwrgs):
super().__init__(*args, **kwrgs)
print("in B")
print("A:")
A()
print("B:")
B()
将产生:
A:
in SecondBase
in Base
in A
B:
in Base
in SecondBase
in B
A:
in SecondBase
in Base
in A
B:
in Base
in SecondBase
in B
如您所见,Base和SecondBase都是您所说的基类,即不继承。尽管如此,由于AandB的多重继承,super()调用分别返回Base/SecondBase或object,具体取决于MRO. 这可以看作: