国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中super的用法實例

2020-01-04 18:08:07
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要介紹了Python中super的用法實例,本文對比了普通繼承和super繼承的相關內容,從運行結果上看,普通繼承和super繼承是一樣的,但是其實它們的內部運行機制不一樣,這一點在多重繼承時體現(xiàn)得很明顯,需要的朋友可以參考下
 

super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重復調用(鉆石繼承)等種種問題。總之前人留下的經(jīng)驗就是:保持一致性。要不全部用類名調用父類,要不就全部用 super,不要一半一半。

普通繼承

復制代碼代碼如下:

class FooParent(object):  
    def __init__(self):  
        self.parent = 'I/'m the parent.'  
        print 'Parent'  
      
    def bar(self,message):  
        print message, 'from Parent'  
          
class FooChild(FooParent):  
    def __init__(self):  
        FooParent.__init__(self)  
        print 'Child'  
          
    def bar(self,message):  
        FooParent.bar(self,message)  
        print 'Child bar function.'  
        print self.parent  
          
if __name__=='__main__':  
    fooChild = FooChild()  
    fooChild.bar('HelloWorld')  

 

super繼承

復制代碼代碼如下:

class FooParent(object):  
    def __init__(self):  
        self.parent = 'I/'m the parent.'  
        print 'Parent'  
      
    def bar(self,message):  
        print message,'from Parent'  
  
class FooChild(FooParent):  
    def __init__(self):  
        super(FooChild,self).__init__()  
        print 'Child'  
          
    def bar(self,message):  
        super(FooChild, self).bar(message)  
        print 'Child bar fuction'  
        print self.parent  
  
if __name__ == '__main__':  
    fooChild = FooChild()  
    fooChild.bar('HelloWorld')  

 

程序運行結果相同,為:

復制代碼代碼如下:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

從運行結果上看,普通繼承和super繼承是一樣的。但是其實它們的內部運行機制不一樣,這一點在多重繼承時體現(xiàn)得很明顯。在super機制里可以保證公共父類僅被執(zhí)行一次,至于執(zhí)行的順序,是按照mro進行的(E.__mro__)。
注意super繼承只能用于新式類,用于經(jīng)典類時就會報錯。
新式類:必須有繼承的類,如果沒什么想繼承的,那就繼承object
經(jīng)典類:沒有父類,如果此時調用super就會出現(xiàn)錯誤:『super() argument 1 must be type, not classobj』

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 木里| 瓦房店市| 南宁市| 凌源市| 临桂县| 山阴县| 页游| 井陉县| 来宾市| 鹿邑县| 吴忠市| 金坛市| 长白| 正镶白旗| 屏东县| 昔阳县| 磐安县| 乐山市| 台东县| 龙川县| 潜山县| 东山县| 介休市| 毕节市| 绥化市| 沙田区| 黄龙县| 新野县| 津南区| 阳山县| 宜城市| 信宜市| 祥云县| 巴里| 元谋县| 宁强县| 和顺县| 梁山县| 德令哈市| 南投县| 黑河市|