最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)子類調(diào)用父類的方法

 更新時(shí)間:2014年11月10日 12:05:38   投稿:shichen2014  
這篇文章主要介紹了Python實(shí)現(xiàn)子類調(diào)用父類的方法,解決子類覆蓋父類初始化方法而出現(xiàn)的不確定問題,可通過調(diào)用超類構(gòu)造方法的未綁定版本或者使用super函數(shù)來解決,需要的朋友可以參考下

本文實(shí)例講述了Python實(shí)現(xiàn)子類調(diào)用父類的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

python和其他面向?qū)ο笳Z言類似,每個類可以擁有一個或者多個父類,它們從父類那里繼承了屬性和方法。如果一個方法在子類的實(shí)例中被調(diào)用,或者一個屬性在子類的實(shí)例中被訪問,但是該方法或?qū)傩栽谧宇愔胁⒉淮嬖冢敲淳蜁詣拥娜テ涓割愔羞M(jìn)行查找。

繼承父類后,就能調(diào)用父類方法和訪問父類屬性,而要完成整個集成過程,子類是需要調(diào)用的構(gòu)造函數(shù)的。

子類不顯式調(diào)用父類的構(gòu)造方法,而父類構(gòu)造函數(shù)初始化了一些屬性,就會出現(xiàn)問題
如果子類和父類都有構(gòu)造函數(shù),子類其實(shí)是重寫了父類的構(gòu)造函數(shù),如果不顯式調(diào)用父類構(gòu)造函數(shù),父類的構(gòu)造函數(shù)就不會被執(zhí)行,導(dǎo)致子類實(shí)例訪問父類初始化方法中初始的變量就會出現(xiàn)問題。

先來看看如下示例:

復(fù)制代碼 代碼如下:
class A:
    def __init__(self):
        self.namea="aaa"
    def funca(self):
        print "function a : %s"%self.namea
class B(A):
    def __init__(self):
        self.nameb="bbb"
    def funcb(self):
        print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()

運(yùn)行結(jié)果:
復(fù)制代碼 代碼如下:
bbb

function b : bbb
Traceback (most recent call last):
  File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 19, in <module>
    print b.funca()
  File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 6, in funca
    print "function a : %s"%self.namea
AttributeError: B instance has no attribute 'namea'


在子類中,構(gòu)造函數(shù)被重寫,但新的構(gòu)造方法沒有任何關(guān)于初始化父類的namea屬性的代碼,為了達(dá)到預(yù)期的效果,子類的構(gòu)造方法必須調(diào)用其父類的構(gòu)造方法來進(jìn)行基本的初始化。有兩種方法能達(dá)到這個目的:調(diào)用超類構(gòu)造方法的未綁定版本,或者使用super函數(shù)。

方法一:調(diào)用未綁定的超類構(gòu)造方法

修改代碼,多增一行:

復(fù)制代碼 代碼如下:
class A:
    def __init__(self):
        self.namea="aaa"
    def funca(self):
        print "function a : %s"%self.namea
class B(A):
    def __init__(self):
        #這一行解決了問題
        A.__init__(self)
        self.nameb="bbb"
    def funcb(self):
        print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()

如上有注釋的一行解決了該問題,直接使用父類名稱調(diào)用其構(gòu)造函數(shù)即可。

這種方法叫做調(diào)用父類的未綁定的構(gòu)造方法。在調(diào)用一個實(shí)例的方法時(shí),該方法的self參數(shù)會被自動綁定到實(shí)例上(稱為綁定方法)。但如果直接調(diào)用類的方法(比如A.__init),那么就沒有實(shí)例會被綁定。這樣就可以自由的提供需要的self參數(shù),這種方法稱為未綁定unbound方法。
通過將當(dāng)前的實(shí)例作為self參數(shù)提供給未綁定方法,B類就能使用其父類構(gòu)造方法的所有實(shí)現(xiàn),從而namea變量被設(shè)置。

方法二:使用super函數(shù)

修改代碼,這次需要增加在原來代碼上增加2行:

復(fù)制代碼 代碼如下:
#父類需要繼承object對象
class A(object):
    def __init__(self):
        self.namea="aaa"
    def funca(self):
        print "function a : %s"%self.namea
class B(A):
    def __init__(self):
        #這一行解決問題
        super(B,self).__init__()
        self.nameb="bbb"
    def funcb(self):
        print "function b : %s"%self.nameb
b=B()
print b.nameb
b.funcb()
b.funca()

如上有注釋的為新增的代碼,其中第一句讓類A繼承自object類,這樣才能使用super函數(shù),因?yàn)檫@是python的“新式類”支持的特性。當(dāng)前的雷和對象可以作為super函數(shù)的參數(shù)使用,調(diào)用函數(shù)返回的對象的任何方法都是調(diào)用超類的方法,而不是當(dāng)前類的方法。

super函數(shù)會返回一個super對象,這個對象負(fù)責(zé)進(jìn)行方法解析,解析過程其會自動查找所有的父類以及父類的父類。

方法一更直觀,方法二可以一次初始化所有超類

super函數(shù)比在超累中直接調(diào)用未綁定方法更直觀,但是其最大的有點(diǎn)是如果子類繼承了多個父類,它只需要使用一次super函數(shù)就可以。然而如果沒有這個需求,直接使用A.__init__(self)更直觀一些。

希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python簡單圖片操作:打開\顯示\保存圖像方法介紹

    python簡單圖片操作:打開\顯示\保存圖像方法介紹

    這篇文章主要介紹了python簡單圖片操作:打開\顯示\保存圖像方法介紹,還涉及將圖片保存為灰度圖的簡單方法示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 通過實(shí)例了解Python異常處理機(jī)制底層實(shí)現(xiàn)

    通過實(shí)例了解Python異常處理機(jī)制底層實(shí)現(xiàn)

    這篇文章主要介紹了通過實(shí)例了解Python異常處理機(jī)制底層實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python字符串定義的三種方式

    python字符串定義的三種方式

    在Python中,字符串是一個非常重要的數(shù)據(jù)類型,可用來存儲和操作文本數(shù)據(jù),本文主要介紹了python字符串定義的三種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-05-05
  • Python中的tkinter庫簡單案例詳解

    Python中的tkinter庫簡單案例詳解

    tkinter?是?Python?的標(biāo)準(zhǔn)?GUI?庫,Python?使用?tkinter?可以快速的創(chuàng)建?GUI?應(yīng)用程序,今天通過本文給大家分享Python中的tkinter庫簡單案例詳解,需要的朋友可以參考下
    2022-01-01
  • 使用Python將TS文件轉(zhuǎn)換為MP4的操作方法

    使用Python將TS文件轉(zhuǎn)換為MP4的操作方法

    在多媒體處理中,將不同格式的視頻文件進(jìn)行轉(zhuǎn)換是一項(xiàng)常見的任務(wù),TS(Transport Stream)是一種常用的流媒體格式,而MP4則是更為廣泛使用的通用視頻格式,本文將介紹如何使用Python和FFmpeg工具將TS文件轉(zhuǎn)換為MP4文件,需要的朋友可以參考下
    2025-04-04
  • Pandas.DataFrame的行名和列名的修改

    Pandas.DataFrame的行名和列名的修改

    本文主要介紹了Pandas.DataFrame的行名和列名的修改,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python 中random 庫的詳細(xì)使用

    Python 中random 庫的詳細(xì)使用

    random庫是使用隨機(jī)數(shù)的Python標(biāo)準(zhǔn)庫,python中用于生成偽隨機(jī)數(shù)的函數(shù)庫是random,今天通過本文給大家分享Python 中random 庫的詳細(xì)使用,感興趣的朋友一起看看吧
    2021-06-06
  • Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解

    Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解

    這篇文章主要介紹了Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解,Pandas是一個用于數(shù)據(jù)分析和處理的Python庫,它提供了高效的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,使得數(shù)據(jù)的清洗、轉(zhuǎn)換、分析和可視化變得更加容易和靈活,需要的朋友可以參考下
    2023-08-08
  • Python+Turtle繪制可愛的可達(dá)鴨

    Python+Turtle繪制可愛的可達(dá)鴨

    一年一度的六一兒童節(jié)又來了,祝大朋友小朋友節(jié)日快樂!本文主要介紹如何運(yùn)用Python中的turtle庫控制函數(shù)繪制可達(dá)鴨,希望你會喜歡
    2022-05-05
  • Python實(shí)現(xiàn)登錄接口的示例代碼

    Python實(shí)現(xiàn)登錄接口的示例代碼

    本篇文章主要介紹了Python實(shí)現(xiàn)登錄接口的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07

最新評論

崇文区| 利津县| 湖南省| 云浮市| 沈丘县| 景泰县| 中山市| 博兴县| 临西县| 行唐县| 泾川县| 灌阳县| 成都市| 兴隆县| 汝阳县| 楚雄市| 镶黄旗| 姜堰市| 藁城市| 江华| 剑阁县| 南丹县| 上林县| 利川市| 广平县| 伊金霍洛旗| 新宾| 甘泉县| 金平| 南陵县| 广灵县| 安阳市| 株洲市| 尚志市| 文水县| 横山县| 赤水市| 马山县| 南丰县| 碌曲县| 望城县|