python_理解篇_理解類繼承

大家好,我是金魚座,一個(gè)走在測試領(lǐng)域這片藍(lán)海中, 蹉跎前行的技術(shù)渣渣,唯有一直走下去,也許能改變點(diǎn)什么,加油!

類繼承可以說是所有面向?qū)ο笳Z言的一個(gè)最重要組成部分,python當(dāng)然不可能缺少這樣的重要內(nèi)容

那么為什么我會(huì)將類繼承單獨(dú)拿出來說呢, 主要是給自己再一次加深理解,作為一個(gè)職業(yè)非主力開發(fā)的測試來說,我們很多時(shí)候?qū)τ谡Z言的理解都是浮于表面,只要稍微進(jìn)行一些變種,就會(huì)一頭霧水,我也希望跟我有一樣感覺的人,能夠通過我寫的這個(gè)加深理解

先說下對(duì)于普通的一個(gè)類定義是這樣的:

class A():
    def __init__(self, a):
        self.a = a
   pass

再說下我遇到的幾種情況
1. 繼承父類時(shí), 子類沒有init初始化

class C(A):
    pass

此時(shí)聲明一個(gè)C = C()時(shí),會(huì)報(bào)錯(cuò)

image.png

原因是繼承A后, A初始化有個(gè)a參數(shù), 此時(shí)需要定義c = C(3)

結(jié)論:子類不重寫 init,實(shí)例化子類時(shí),會(huì)自動(dòng)調(diào)用父類定義的 init。

2. 繼承父類時(shí), 子類有自己獨(dú)立的初始化init

class B(A):
    def __init__(self, b):
        self.b = b
    pass

此時(shí)聲明:b = B(2)時(shí), 2會(huì)自動(dòng)賦值給b,可以通過b.b來進(jìn)行輸出

注意:此時(shí)如果引用b.a 時(shí)會(huì)報(bào)錯(cuò)
image.png

子類不需要自動(dòng)調(diào)用父類的方法:子類重寫init()方法,實(shí)例化子類后,將不會(huì)自動(dòng)調(diào)用父類的init()的方法。

3. 繼承父類時(shí),需要繼承父類的初始化init也有自己的init

class B(A):
    def __init__(self, b):
         A.__init__(self, 2)
        super(B, self).__init__(2)
        self.b = b
    pass

上述的兩種super和A的鏈?zhǔn)揭枚伎梢?br> 此時(shí)聲明:b = B(1)時(shí), b.b = 1, b.a = 2

結(jié)論 如果重寫了init 時(shí),要繼承父類的構(gòu)造方法,可以使用 super(子類,self).init(參數(shù)1,參數(shù)2,....), 或者 父類名稱.init(self,參數(shù)1,參數(shù)2,...)

通過上面的三種情況, 我們可以看出, python的繼承并不能直接引用父類的初始化參數(shù),必須通過一定的處理,才能做到成功引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容