<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Python中super關鍵字用法實例分析

        來源:懂視網 責編:小采 時間:2020-11-27 14:33:50
        文檔

        Python中super關鍵字用法實例分析

        Python中super關鍵字用法實例分析:本文實例講述了Python中super關鍵字用法。分享給大家供大家參考。具體分析如下: 在Python類的方法(method)中,要調用父類的某個方法,在Python 2.2以前,通常的寫法如代碼段1: 代碼段1: class A: def __init__(self): print
        推薦度:
        導讀Python中super關鍵字用法實例分析:本文實例講述了Python中super關鍵字用法。分享給大家供大家參考。具體分析如下: 在Python類的方法(method)中,要調用父類的某個方法,在Python 2.2以前,通常的寫法如代碼段1: 代碼段1: class A: def __init__(self): print

        本文實例講述了Python中super關鍵字用法。分享給大家供大家參考。具體分析如下:

        在Python類的方法(method)中,要調用父類的某個方法,在Python 2.2以前,通常的寫法如代碼段1:

        代碼段1:

        class A:
        def __init__(self):
         print "enter A"
         print "leave A"
        class B(A):
        def __init__(self):
         print "enter B"
         A.__init__(self)
         print "leave B"
        >>> b = B()
        
        enter B
        enter A
        leave A
        leave B
        
        

        即,使用非綁定的類方法(用類名來引用的方法),并在參數列表中,引入待綁定的對象(self),從而達到調用父類的目的。

        這樣做的缺點是,當一個子類的父類發生變化時(如類B的父類由A變為C時),必須遍歷整個類定義,把所有的通過非綁定的方法的類名全部替換過來,例如代碼段2,

        代碼段2:

        class B(C): # A --> C
        def __init__(self):
         print "enter B"
         C.__init__(self) # A --> C
         print "leave B"
        
        

        如果代碼簡單,這樣的改動或許還可以接受。但如果代碼量龐大,這樣的修改可能是災難性的。很容易導致修改錯誤的出現。

        因此,自Python 2.2開始,Python添加了一個關鍵字super,來解決這個問題。下面是Python 2.3的官方文檔說明:

        super(type[, object-or-type])
        Return the superclass of type. If the second argument is omitted the super object
        returned is unbound. If the second argument is an object, isinstance(obj, type) 
        must be true. If the second argument is a type, issubclass(type2, type) must be 
        true. super() only works for new-style classes.
        A typical use for calling a cooperative superclass method is:
         class C(B):
         def meth(self, arg):
         super(C, self).meth(arg)
        New in version 2.2.
        
        

        從說明來看,可以把類B改寫如代碼段3:

        代碼段3:

        class A(object): # A must be new-style class
        def __init__(self):
         print "enter A"
         print "leave A"
        class B(C): # A --> C
        def __init__(self):
         print "enter B"
         super(B, self).__init__()
         print "leave B"
        
        

        嘗試執行上面同樣的代碼,結果一致,但修改的代碼只有一處,把代碼的維護量降到最低,是一個不錯的用法。因此在我們的開發過程中,super關鍵字被大量使用,而且一直表現良好。

        1. super并不是一個函數,是一個類名,形如super(B, self)事實上調用了super類的初始化函數,產生了一個super對象;

        2. super類的初始化函數并沒有做什么特殊的操作,只是簡單記錄了類類型和具體實例;

        3. super(B, self).func的調用并不是用于調用當前類的父類的func函數;

        4. Python的多繼承類是通過mro的方式來保證各個父類的函數被逐一調用,而且保證每個父類函數只調用一次(如果每個類都使用super);

        5. 混用super類和非綁定的函數是一個危險行為,這可能導致應該調用的父類函數沒有調用或者一個父類函數被調用多次。

        從super關鍵字的help我們也能看出來。

        Help on class super in module __builtin__:
        class super(object)
        | super(type) -> unbound super object
        | super(type, obj) -> bound super object; requires isinstance(obj, type)
        | super(type, type2) -> bound super object; requires issubclass(type2, type)
        | Typical use to call a cooperative superclass method:
        | class C(B):
        | def meth(self, arg):
        | super(C, self).meth(arg)
        |
        | Methods defined here:
        .......

        從上面也能看出來,super是一個類,而且是__builtin__模塊中的。

        從上面的描述來看,super主要是用于調用父類的方法。

        那么,在2.2之前的方法也能調用。為啥非得用super呢?

        這是因為super能夠阻止對父類方法的多次調用。

        super,改變了父類搜索順序, 返回的是一個特殊的父類對象
        看例子:

        class A: pass class B(A): pass class C(A):pass class D(B, C): pass

        這是4個類的基本關系。

        假如不使用super,讓D的對象調用他們共有的一個方法,會2次調用A中這個方法。

        希望本文所述對大家的Python程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Python中super關鍵字用法實例分析

        Python中super關鍵字用法實例分析:本文實例講述了Python中super關鍵字用法。分享給大家供大家參考。具體分析如下: 在Python類的方法(method)中,要調用父類的某個方法,在Python 2.2以前,通常的寫法如代碼段1: 代碼段1: class A: def __init__(self): print
        推薦度:
        標簽: 用法 實例 python
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 美女视频黄免费亚洲| 亚洲人成网站在线播放vr| 国产成人免费一区二区三区| 亚洲精品无码99在线观看| 亚洲精品视频观看| 一级做a爰片性色毛片免费网站| 亚洲国产精品13p| 伊人婷婷综合缴情亚洲五月| 亚洲成年人电影网站| 日日狠狠久久偷偷色综合免费| 你是我的城池营垒免费看 | xxxxxx日本处大片免费看| 无码专区AAAAAA免费视频| 国产免费午夜a无码v视频| 亚洲人成影院午夜网站| 久久这里只精品国产免费10| 亚洲av午夜精品一区二区三区| 亚洲国产另类久久久精品小说 | 亚洲一区精品无码| a毛片在线看片免费| 亚洲综合视频在线观看| 免费看国产成年无码AV片| 亚洲网站在线观看| 免费看黄的成人APP| 亚洲一区二区三区偷拍女厕| 在线观看片免费人成视频无码| 免费特级黄毛片在线成人观看| 免费国产综合视频在线看| 国产色在线|亚洲| 性xxxxx免费视频播放 | 亚洲精品无码久久久| 免费播放在线日本感人片| 亚洲av永久无码精品天堂久久| 亚洲日韩国产一区二区三区在线| 亚洲丰满熟女一区二区哦| 一二三四在线观看免费高清中文在线观看 | 五月婷婷亚洲综合| 亚洲国产精品久久久久秋霞小| 在线免费中文字幕| 亚洲欧洲中文日产| 国产成人精品男人免费|