国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時隨地免費學(xué)習(xí)課程

            當(dāng)前位置:首頁  >  技術(shù)干貨  > Python繼承性和 java 是一樣的嗎?

            Python繼承性和 java 是一樣的嗎?

            來源:千鋒教育
            發(fā)布人:xqq
            時間: 2023-11-07 10:15:57 1699323357

            聊完了多態(tài),再來看看面向?qū)ο蟮牧硪粋€特征:繼承性。

            什么是繼承?繼承就是定義好了一個類A(父類);再定義一個新類B(子類),類B擁有類A的方法和屬性,并且又定義了新的屬性和方法。類A稱為父類,類B稱為子類。

            java中定義兩個類的繼承關(guān)系,使用extends關(guān)鍵字實現(xiàn),在python中呢?

            classFather:

            """這是一個父類"""

            __age=45

            classSon(Father):

            """這是一個子類"""

            python中不需要加關(guān)鍵字來說明繼承關(guān)系,只需要將父類的名稱放在括號中就可以了,看起來要比java簡潔一些。

            父類和子類的初始化函數(shù)調(diào)用

            前面講過,pythonclass中可以定義自己的初始化函數(shù),在實例化的時會被調(diào)用。那如果父類和子類都有初始化函數(shù)或者父類有而子類沒有,那初始化函數(shù)該如何執(zhí)行呢?這里分為三種情況來說明,先來看第一種。

            第一種情況,

            父類有init而子類沒有,這時父類的初始化函數(shù)會被默認(rèn)調(diào)用

            classFather():

            """這是一個父類"""

            def__init__(self,age):

            print("Father'sinitfunctioninvoke")

            self.__age=age

            classSon(Father):

            """這是一個子類"""

            son=Son(5)

            這里要注意,父類中需要的age參數(shù)一定要傳進(jìn)去哦,要不然會報錯的。

            第二種情況

            父類,子類都有init,而子類沒有顯式調(diào)用父類的init方法時,父類初始化函數(shù)是不會被調(diào)用的

            classFather():

            """這是一個父類"""

            def__init__(self,age):

            print("Father'sinitfunctioninvoke")

            self.__age=age

            defget_age(self):

            returnself.__age

            classSon(Father):

            """這是一個子類"""

            def__init__(self,age):

            print("Son'sinitfunctioninvoke")

            self.__age=age

            son=Son(5)#Son'sinitfunctioninvoke

            print(son.get_age())#AttributeError:'Son'objecthasnoattribute'_Father__age'

            細(xì)心的同學(xué)會發(fā)現(xiàn),代碼中的最后一句報錯了,表示Son對象沒有Father類的__age變量。這是因為

            父類的初始化函數(shù)沒有執(zhí)行,父類的__age變量則沒有初始化

            get_age函數(shù)是被子類從父類繼承來的,返回的是父類的__age變量

            那我要是想解決這個錯誤,該怎么做呢?有兩種方法

            在子類Son的初始化函數(shù)中顯式調(diào)用父類Father的初始化函數(shù)

            在子類Son中重新定義個get_age方法,這樣就會覆蓋父類的同名方法,返回的是子類的_age變量

            第二種方法就不貼代碼了,感興趣的話可以試試。重點來看第一種方法,這就引出了第3種情況。

            第三種情況

            子類在自己定義的init方法中,顯式調(diào)用父類的init方法,父類和子類的屬性都會被初始化

            classFather():

            """這是一個父類"""

            def__init__(self,age):

            print("Father'sinitfunctioninvoke")

            self.__age=age

            defget_age(self):

            returnself.__age

            classSon(Father):

            """這是一個子類"""

            def__init__(self,age):

            print("Son'sinitfunctioninvoke")

            self.__age=age

            super(Son,self).__init__(age+25)

            defget_age(self):

            returnself.__age

            defget_father_age(self):

            returnsuper(Son,self).get_age()

            son=Son(5)

            #Son'sinitfunctioninvoke

            #Father'sinitfunctioninvoke

            print(son.get_father_age())#30

            print(son.get_age())#5

            看到代碼中是怎么調(diào)用父類的初始化函數(shù)嗎?對,用的是super。

            java中也有super關(guān)鍵字,表示對父類的指代,python的super是怎么用的,原理是什么?我們來看下。

            super有哪些用法?

            下面說明的只針對python單繼承的情況,多繼承這里暫不涉及,有興趣的同學(xué)可以自行充電。

            在單繼承中,super也可以看做對其父類的指代,它的使用場合就是用來調(diào)用父類的方法:

            調(diào)用父類的__init__方法

            實現(xiàn)了和父類相同的功能,還需要調(diào)用父類的方法

            它的寫法是super(Son,self).xxx,當(dāng)然也可以寫成super()這種簡寫的形式。

            來看代碼

            classFather():

            """這是一個父類"""

            def__init__(self,age):

            print("Father'sinitfunctioninvoke")

            self.__age=age

            defget_age(self):

            returnself.__age

            classSon(Father):

            """這是一個子類"""

            def__init__(self,age):

            print("Son'sinitfunctioninvoke")

            self.__age=age

            super(Son,self).__init__(age+25)

            defget_age(self):

            returnself.__age

            defget_father_age(self):

            returnsuper(Son,self).get_age()

            son=Son(5)

            #Son'sinitfunctioninvoke

            #Father'sinitfunctioninvoke

            print(son.get_father_age())#30

            print(son.get_age())#5

            通過代碼來窺探下它的執(zhí)行原理,以super(Son,self).get_age()為例

            self是Son的一個實例,super把self轉(zhuǎn)化為父類Father的一個實例對象

            因為self經(jīng)過了轉(zhuǎn)化,那它得到的__age,也是父類初始化時得到的__age

                  以上內(nèi)容為大家介紹了Python繼承性和java是一樣的嗎?,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://www.parentadvocate.org/

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
            免費領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT