最新国产好看的视频,伊人天堂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言類似,每個(gè)類可以擁有一個(gè)或者多個(gè)父類,它們從父類那里繼承了屬性和方法。如果一個(gè)方法在子類的實(shí)例中被調(diào)用,或者一個(gè)屬性在子類的實(shí)例中被訪問,但是該方法或?qū)傩栽谧宇愔胁⒉淮嬖?,那么就?huì)自動(dòng)的去其父類中進(jìn)行查找。

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

子類不顯式調(diào)用父類的構(gòu)造方法,而父類構(gòu)造函數(shù)初始化了一些屬性,就會(huì)出現(xiàn)問題
如果子類和父類都有構(gòu)造函數(shù),子類其實(shí)是重寫了父類的構(gòu)造函數(shù),如果不顯式調(diào)用父類構(gòu)造函數(shù),父類的構(gòu)造函數(shù)就不會(huì)被執(zhí)行,導(dǎo)致子類實(shí)例訪問父類初始化方法中初始的變量就會(huì)出現(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á)到這個(gè)目的:調(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)用一個(gè)實(shí)例的方法時(shí),該方法的self參數(shù)會(huì)被自動(dòng)綁定到實(shí)例上(稱為綁定方法)。但如果直接調(diào)用類的方法(比如A.__init),那么就沒有實(shí)例會(huì)被綁定。這樣就可以自由的提供需要的self參數(shù),這種方法稱為未綁定unbound方法。
通過將當(dāng)前的實(shí)例作為self參數(shù)提供給未綁定方法,B類就能使用其父類構(gòu)造方法的所有實(shí)現(xiàn),從而namea變量被設(shè)置。

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

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

復(fù)制代碼 代碼如下:
#父類需要繼承object對(duì)象
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)前的雷和對(duì)象可以作為super函數(shù)的參數(shù)使用,調(diào)用函數(shù)返回的對(duì)象的任何方法都是調(diào)用超類的方法,而不是當(dāng)前類的方法。

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

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

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

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

相關(guān)文章

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

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

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

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

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

    python字符串定義的三種方式

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

    Python中的tkinter庫(kù)簡(jiǎn)單案例詳解

    tkinter?是?Python?的標(biāo)準(zhǔn)?GUI?庫(kù),Python?使用?tkinter?可以快速的創(chuàng)建?GUI?應(yīng)用程序,今天通過本文給大家分享Python中的tkinter庫(kù)簡(jiǎn)單案例詳解,需要的朋友可以參考下
    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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python 中random 庫(kù)的詳細(xì)使用

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

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

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

    這篇文章主要介紹了Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解,Pandas是一個(gè)用于數(shù)據(jù)分析和處理的Python庫(kù),它提供了高效的數(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庫(kù)控制函數(shù)繪制可達(dá)鴨,希望你會(huì)喜歡
    2022-05-05
  • Python實(shí)現(xiàn)登錄接口的示例代碼

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

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

最新評(píng)論

静乐县| 开江县| 三亚市| 普兰店市| 岳普湖县| 赣榆县| 苍南县| 长葛市| 武威市| 威远县| 明光市| 大理市| 翁源县| 静宁县| 革吉县| 达拉特旗| 定结县| 武威市| 汉寿县| 达州市| 海兴县| 济宁市| 呼伦贝尔市| 西城区| 城口县| 察隅县| 望江县| 原阳县| 东乌| 赤峰市| 临武县| 鄂托克前旗| 台东市| 绥德县| 土默特左旗| 鹿邑县| 棋牌| 合江县| 逊克县| 晋中市| 东乌珠穆沁旗|