久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

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

        手機(jī)站
        千鋒教育

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

        千鋒教育

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

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

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

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

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

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

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

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

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

        classFather:

        """這是一個(gè)父類"""

        __age=45

        classSon(Father):

        """這是一個(gè)子類"""

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

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

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

        第一種情況,

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

        classFather():

        """這是一個(gè)父類"""

        def__init__(self,age):

        print("Father'sinitfunctioninvoke")

        self.__age=age

        classSon(Father):

        """這是一個(gè)子類"""

        son=Son(5)

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

        第二種情況

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

        classFather():

        """這是一個(gè)父類"""

        def__init__(self,age):

        print("Father'sinitfunctioninvoke")

        self.__age=age

        defget_age(self):

        returnself.__age

        classSon(Father):

        """這是一個(gè)子類"""

        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é)會(huì)發(fā)現(xiàn),代碼中的最后一句報(bào)錯(cuò)了,表示Son對(duì)象沒(méi)有Father類的__age變量。這是因?yàn)?/p>

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

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

        那我要是想解決這個(gè)錯(cuò)誤,該怎么做呢?有兩種方法

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

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

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

        第三種情況

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

        classFather():

        """這是一個(gè)父類"""

        def__init__(self,age):

        print("Father'sinitfunctioninvoke")

        self.__age=age

        defget_age(self):

        returnself.__age

        classSon(Father):

        """這是一個(gè)子類"""

        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ù)嗎?對(duì),用的是super。

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

        super有哪些用法?

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

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

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

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

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

        來(lái)看代碼

        classFather():

        """這是一個(gè)父類"""

        def__init__(self,age):

        print("Father'sinitfunctioninvoke")

        self.__age=age

        defget_age(self):

        returnself.__age

        classSon(Father):

        """這是一個(gè)子類"""

        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

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

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

        因?yàn)閟elf經(jīng)過(guò)了轉(zhuǎn)化,那它得到的__age,也是父類初始化時(shí)得到的__age

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

        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(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
        Python之map、reduce和filter

        今天給大家介紹的是Python當(dāng)中三個(gè)非常神奇的方法:map、reduce和filter。不知道大家看到map和reduce的時(shí)候有沒(méi)有什么感覺(jué),如果看過(guò)之前我們大...詳情>>

        2023-11-07 13:01:34
        Python工具庫(kù)之collections

        collection在英文當(dāng)中有容器的意思,所以顧名思義,這是一個(gè)容器的集合。這個(gè)庫(kù)當(dāng)中的容器很多,有一些不是很常用,本篇文章選擇了其中最常用的...詳情>>

        2023-11-07 12:54:22
        Python中heapq與優(yōu)先隊(duì)列

        今天的文章來(lái)介紹Python當(dāng)中一個(gè)蠻有用的庫(kù)——heapq。heapq的全寫是heapqueue,是堆隊(duì)列的意思。這里的堆和隊(duì)列都是數(shù)據(jù)結(jié)構(gòu),在后序的文章當(dāng)...詳情>>

        2023-11-07 12:25:33
        python閉包的定義

        如果在一個(gè)內(nèi)部函數(shù)中,引用了外部非全局作用域中的變量,那么這個(gè)內(nèi)部函數(shù)就被認(rèn)為是閉包(closure)。在一些語(yǔ)言中,在函數(shù)中可以(嵌套)定義另...詳情>>

        2023-11-07 11:53:09
        Python中可以hash的數(shù)據(jù)類型

        在Python中,僅僅只有不可變數(shù)據(jù)類型可以被hash,然而每個(gè)自定義的對(duì)象在Python中都可以被hash,默認(rèn)的他們的hash值是由他們的id派生的。也就意...詳情>>

        2023-11-07 11:49:33
        天峻县| 高唐县| 丹巴县| 天镇县| 读书| 卢龙县| 江北区| 肥城市| 阳东县| 黔西县| 丰镇市| 舒兰市| 津市市| 新邵县| 吉水县| 万年县| 巴彦淖尔市| 万宁市| 开原市| 蕲春县| 安岳县| 威信县| 深泽县| 道孚县| 桂平市| 利川市| 聊城市| 乳山市| 陆良县| 榆树市| 桃江县| 西乡县| 涟水县| 桐柏县| 明水县| 湾仔区| 凤台县| 阿坝县| 渑池县| 玉山县| 贵溪市|