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

首頁 > 編程 > Python > 正文

深入理解Python 關(guān)于supper 的 用法和原理

2020-02-22 23:20:18
字體:
供稿:網(wǎng)友

一、前言

Python 面向?qū)ο笾杏欣^承這個概念,初學(xué)時感覺很牛逼,里面也有個super類,經(jīng)常見到,最近做一些題才算是理解了。特地記錄分享給后來研究的小伙伴,畢竟現(xiàn)在小學(xué)生都開始學(xué)了(滑稽臉)

二、代碼

直接上干貨,能把下面一個問題全答對,后面就不用看了。

class A():  def go(self):    print ("go A go!")  def stop(self):    print ("stop A stop!")  def pause(self):    raise Exception("Not Implemented")class B(A):  def go(self):    super(B, self).go()    print ("go B go!")class C(A):  def go(self):    super(C, self).go()    print ("go C go!")  def stop(self):    super(C, self).stop()    print ("stop C stop!")class D(B,C):  def go(self):    super(D, self).go()    print ("go D go!")  def stop(self):    super(D, self).stop()    print ("stop D stop!")  def pause(self):    print ("wait D wait!")class E(B,C):  passa = A()b = B()c = C()d = D()e = E()# 說明下列代碼的輸出結(jié)果a.go()print('--------')b.go()print('--------')c.go()print('--------')d.go()print('--------')e.go()print('--------')a.stop()print('--------')b.stop()print('--------')c.stop()print('--------')d.stop()print('--------')e.stop()print(D.mro())a.pause()b.pause()c.pause()d.pause()e.pause()

當(dāng)然,直接運行就有答案了,還是要仔細想一下,反正看到我第一次跑出的結(jié)果的時候,我都不敢相信自己的眼睛。

step1:

幾個概念:

繼承的功能:父類的代碼重用

多態(tài)的功能:同一方法對不同類型的對象會有相應(yīng)的結(jié)果

開閉原則:對擴展開放,對修改封閉

super類功能:新式類實現(xiàn)廣度優(yōu)先的不重復(fù)的調(diào)用父類,解決了鉆石繼承(多繼承)的難題

step2:

super實現(xiàn)原理:通過c3算法,生成mro(method resolution order)列表,根據(jù)列表中元素順序查詢調(diào)用

新式類調(diào)用順序為廣度優(yōu)先,舊式類為深度優(yōu)先

step3:

個人理解:

1.調(diào)用了父類的方法,出入的是子類的實例對象

2.新式類子類(A,B),A就在B之前

3.super類似于嵌套的一種設(shè)計,當(dāng)代碼執(zhí)行到super實例化后,先去找同級父類,若沒有其余父類,再執(zhí)行自身父類,再往下走,

  簡潔點的三個原則就是:

子類在父類前,所有類不重復(fù)調(diào)用,從左到右

理解了以上的說法,題目就沒問題了。

也不用跑了,答案如下:

a.go()# go A go!b.go()# go A go!# go B go!c.go()# go A go!# go C go!d.go()# go A go!# go C go!# go B go!# go D go!e.go()# go A go!# go C go!# go B go!a.stop()# stop A stop!b.stop()# stop A stop!c.stop()# stop A stop!# stop C stop!d.stop()# stop A stop!# stop C stop!# stop D stop!e.stop()# stop A stop!a.pause()# ... Exception: Not Implementedb.pause()# ... Exception: Not Implementedc.pause()# ... Exception: Not Implementedd.pause()# wait D wait!e.pause()# ...Exception: Not Implemented            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴宁市| 土默特左旗| 灵丘县| 卢氏县| 资兴市| 余江县| 芜湖县| 丰原市| 鄢陵县| 仙游县| 澄城县| 哈尔滨市| 遂宁市| 抚远县| 安庆市| 汉阴县| 崇州市| 兴仁县| 石泉县| 汉川市| 福建省| 沂水县| 林芝县| 蓝山县| 弥勒县| 南华县| 亚东县| 大悟县| 荥经县| 武汉市| 茌平县| 买车| 米泉市| 金阳县| 乡城县| 玉树县| 修文县| 安陆市| 新绛县| 巫溪县| 安阳市|