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

Python中super關(guān)鍵字用法實(shí)例分析

 更新時(shí)間:2015年05月28日 12:39:14   作者:imzoer  
這篇文章主要介紹了Python中super關(guān)鍵字用法,實(shí)例分析了super關(guān)鍵字的功能及相關(guān)使用技巧,需要的朋友可以參考下

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

在Python類的方法(method)中,要調(diào)用父類的某個(gè)方法,在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

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

這樣做的缺點(diǎn)是,當(dāng)一個(gè)子類的父類發(fā)生變化時(shí)(如類B的父類由A變?yōu)镃時(shí)),必須遍歷整個(gè)類定義,把所有的通過非綁定的方法的類名全部替換過來,例如代碼段2,

代碼段2:

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

如果代碼簡單,這樣的改動或許還可以接受。但如果代碼量龐大,這樣的修改可能是災(zāi)難性的。很容易導(dǎo)致修改錯(cuò)誤的出現(xiàn)。

因此,自Python 2.2開始,Python添加了一個(gè)關(guān)鍵字super,來解決這個(gè)問題。下面是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"

嘗試執(zhí)行上面同樣的代碼,結(jié)果一致,但修改的代碼只有一處,把代碼的維護(hù)量降到最低,是一個(gè)不錯(cuò)的用法。因此在我們的開發(fā)過程中,super關(guān)鍵字被大量使用,而且一直表現(xiàn)良好。

1. super并不是一個(gè)函數(shù),是一個(gè)類名,形如super(B, self)事實(shí)上調(diào)用了super類的初始化函數(shù),產(chǎn)生了一個(gè)super對象;

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

3. super(B, self).func的調(diào)用并不是用于調(diào)用當(dāng)前類的父類的func函數(shù);

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

5. 混用super類和非綁定的函數(shù)是一個(gè)危險(xiǎn)行為,這可能導(dǎo)致應(yīng)該調(diào)用的父類函數(shù)沒有調(diào)用或者一個(gè)父類函數(shù)被調(diào)用多次。

從super關(guān)鍵字的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是一個(gè)類,而且是__builtin__模塊中的。

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

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

這是因?yàn)閟uper能夠阻止對父類方法的多次調(diào)用。

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

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

這是4個(gè)類的基本關(guān)系。

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

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

相關(guān)文章

  • 微信公眾號token驗(yàn)證失敗解決方案

    微信公眾號token驗(yàn)證失敗解決方案

    這篇文章主要介紹了微信公眾號token驗(yàn)證失敗解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解DeBug Python神級工具PySnooper

    詳解DeBug Python神級工具PySnooper

    這篇文章主要介紹了詳解DeBug Python神級工具PySnooper,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 高斯衰減python實(shí)現(xiàn)方式

    高斯衰減python實(shí)現(xiàn)方式

    這篇文章主要介紹了高斯衰減python實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示

    Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示

    這篇文章主要介紹了Python爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)并數(shù)據(jù)可視化展示,下面文章圍繞Python爬蟲的相關(guān)資料展開對爬取當(dāng)網(wǎng)書籍?dāng)?shù)據(jù)的詳細(xì)介紹,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • Python實(shí)現(xiàn)希爾排序算法的原理與用法實(shí)例分析

    Python實(shí)現(xiàn)希爾排序算法的原理與用法實(shí)例分析

    這篇文章主要介紹了Python實(shí)現(xiàn)希爾排序算法,簡單講述了希爾排序的原理并結(jié)合具體實(shí)例形式分析了Python希爾排序的具體實(shí)現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2017-11-11
  • 淺談python中的getattr函數(shù) hasattr函數(shù)

    淺談python中的getattr函數(shù) hasattr函數(shù)

    下面小編就為大家?guī)硪黄獪\談python中的getattr函數(shù) hasattr函數(shù)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • np.unique()的具體使用

    np.unique()的具體使用

    本文主要介紹了np.unique()的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Django?Rest?Framework實(shí)現(xiàn)身份認(rèn)證源碼詳解

    Django?Rest?Framework實(shí)現(xiàn)身份認(rèn)證源碼詳解

    這篇文章主要為大家介紹了Django?Rest?Framework實(shí)現(xiàn)身份認(rèn)證源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • python實(shí)現(xiàn)線性回歸的示例代碼

    python實(shí)現(xiàn)線性回歸的示例代碼

    線性回歸就是通過多次取點(diǎn),找出符合函數(shù)的曲線,那么就可以完成一維線性回歸,本文通過實(shí)例代碼給大家介紹python實(shí)現(xiàn)線性回歸的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • 使用Django2快速開發(fā)Web項(xiàng)目的詳細(xì)步驟

    使用Django2快速開發(fā)Web項(xiàng)目的詳細(xì)步驟

    這篇文章主要介紹了使用Django2快速開發(fā)Web項(xiàng)目的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論

云浮市| 华坪县| 莱芜市| 灵璧县| 那曲县| 科尔| 泸州市| 汉中市| 青海省| 沙河市| 永清县| 积石山| 旺苍县| 麻阳| 吉木乃县| 扎鲁特旗| 来宾市| 连江县| 团风县| 镇赉县| 会昌县| 溧水县| 施甸县| 罗定市| 宁国市| 裕民县| 汕尾市| 益阳市| 庄河市| 崇州市| 黄冈市| 华坪县| 岳西县| 贵港市| 济源市| 齐齐哈尔市| 邓州市| 江孜县| 西乡县| 都江堰市| 翁牛特旗|