python繼承的時候在子類中調用父類的方法


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類繼承了兩個父類,那么按照前后順序,調用繼承的第一個父類中的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM