1、单继承
super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用。
class Base(object): def __init__(self): print(‘Create Base‘) class ChildClassA(Base): def __init__(self): print(‘Create ChildClassA‘) super().__init__() ChildClassA() #输出 #Create ChildClassA #Create Base
2、多继承
注意:多继承时,会设计继承顺序,supper()相当于返回继承顺序的下一个类,而不是父类。
def GetSupperOrder(class_name,self): mro = self.__class__.mro() # #mro()用来获得类的继承顺序。 return mro[mro.index(class_name) + 1] class Base(object): def __init__(self): print(‘Create Base‘) class ChildClassA(Base): def __init__(self): print(‘Enter ChildClassA‘) super().__init__() print(‘Leave ChildClassA‘) class ChildClassB(Base): def __init__(self): print(‘Enter ChildClassB‘) super().__init__() print(‘Leave ChildClassB‘) class ChildClassC(ChildClassA,ChildClassB): pass c = ChildClassC() print(c.__class__.__mro__) # 输出: #Enter ChildClassA #Enter ChildClassB #Create Base #Leave ChildClassB #Leave ChildClassA #(<class ‘__main__.ChildClassC‘>, <class ‘__main__.ChildClassA‘>, <class ‘__main__.ChildClassB‘>, <class ‘__main__.Base‘>, <class ‘object‘>)
从以上结果,可以看出:
super()和父类没有关系,继承执行的顺序是 ChildClassA → ChildClassB → Base
python3 super().__init__() 和 __init__() 的区别
原文:https://www.cnblogs.com/AndyChen2015/p/11428212.html