1、使用: 父類.方法名(參數)
class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
Base.__init__(self) # 在子類中調用父類的方法:父類名.方法名稱(參數)
if __name__ == '__main__':
A()
這種方法的缺點是,當父類的名字改變的時候,子類中調用的時候,類名的地方也需要修改。
因此當多個類同時繼承於一個父類,這個父類的類名字改變的時候,就會導致需要多個子類中這一處的代碼需要修改。
2、super()方法:
在子類中使用super方法調用父類中的方法,有2種表現形式:
第一種super().方法名(參數)
class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(參數)
if __name__ == '__main__':
A()

第二種
super(type或者type生成的類對象,self).方法名(參數)
class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
super(A,self).__init__() #使用super(type,instance).__init__(參數)
if __name__ == '__main__':
A()
super().__init__()<===等價====>super(A,self).__init__()
多層繼承1
class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(參數)
class B(A):
def __init__(self):
print('init action in subclass B')
super().__init__() #使用super().__init__(參數)
if __name__ == '__main__':
B()

多層繼承2
class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(參數)
class B(A):
def __init__(self):
print('init action in subclass B')
super(A,self).__init__() #使用super(type,self).__init__(參數)
if __name__ == '__main__':
B()

class Base:
def __init__(self):
print('init action in father class Base')
class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(參數)
class B(A):
def __init__(self):
print('init action in subclass B')
super(A,A).__init__(self) #使用super(type,self).__init__(參數),這注釋部分的代碼都可以試試
#super(A,B).__init__(self)
#super(B,A).__init__(self)
#super(Base,Base).__init__(self)
if __name__ == '__main__':
B()

使用super的時候
super(type1,[type2_or_obj]),type1決定了super前往哪個父類調用指定的方法。
如果使用的時候,一個type1類繼承了兩個父類,那么按照前后順序,調用繼承的第一個父類中的方法。