国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題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關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

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

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:33:50
文檔

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

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

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

在Python類(lèi)的方法(method)中,要調(diào)用父類(lèi)的某個(gè)方法,在Python 2.2以前,通常的寫(xiě)法如代碼段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

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

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

代碼段2:

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

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

因此,自Python 2.2開(kāi)始,Python添加了一個(gè)關(guān)鍵字super,來(lái)解決這個(gè)問(wèn)題。下面是Python 2.3的官方文檔說(shuō)明:

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.

從說(shuō)明來(lái)看,可以把類(lèi)B改寫(xiě)如代碼段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ò)的用法。因此在我們的開(kāi)發(fā)過(guò)程中,super關(guān)鍵字被大量使用,而且一直表現(xiàn)良好。

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

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

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

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

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

從super關(guān)鍵字的help我們也能看出來(lái)。

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:
.......

從上面也能看出來(lái),super是一個(gè)類(lèi),而且是__builtin__模塊中的。

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

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

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

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

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

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

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

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

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

Python中super關(guān)鍵字用法實(shí)例分析:本文實(shí)例講述了Python中super關(guān)鍵字用法。分享給大家供大家參考。具體分析如下: 在Python類(lèi)的方法(method)中,要調(diào)用父類(lèi)的某個(gè)方法,在Python 2.2以前,通常的寫(xiě)法如代碼段1: 代碼段1: class A: def __init__(self): print
推薦度:
標(biāo)簽: 用法 實(shí)例 python
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top
主站蜘蛛池模板: 国产精品ⅴ视频免费观看 | 国产短视频精品一区二区三区 | 欧美日韩一二三区 | 国产一区二区三区亚洲欧美 | 国产精品成 | 黄色毛片免费观看 | 日本a级精品一区二区三区 日本不卡视频一区二区三区 | 久久久网久久久久合久久久久 | 欧美亚洲免费 | 在线亚洲欧美日韩 | 久久久久久久99久久久毒国产 | 国产一区二区在线播放 | 亚洲高清视频一区 | 欧美不卡一区二区三区 | 久久精品国产999久久久 | 久久精品视频一区二区三区 | 图片一区| 欧美日韩国产在线成人网 | 久久精品一区二区三区不卡牛牛 | 国产成人一区在线播放 | av福利影院 | 国产网站在线免费观看 | 国产精品第十页 | 亚洲视频一二区 | 国产成人精品曰本亚洲 | 亚洲三级在线播放 | 国产午夜视频在线 | 成人亚洲国产综合精品91 | 91久久精品国产91久久性色也 | 精品国产一区二区三区免费看 | 亚洲欧美日韩网站 | 一级全黄毛片 | 一区二区三区四区日韩 | 午夜精品久久久久久毛片 | 亚洲精品国产第七页在线 | 国产在线精品99一卡2卡 | 欧区一欧区二欧区三免费 | 免费一区视频 | 亚洲国产成人精品区 | 最新大黄网站免费 | 91精品国产品国语在线不卡 |