亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python SocketServer源碼深入解讀

系統(tǒng) 1743 0

再看繼承

真正的大餐來之前,還是來點(diǎn)兒開胃菜!回顧一下關(guān)于類的繼承的知識:

python SocketServer源碼深入解讀_第1張圖片

python SocketServer源碼深入解讀_第2張圖片

python SocketServer源碼深入解讀_第3張圖片

我們先看上面的代碼,這是一個(gè)簡單的類繼承,我們可以看到父類Base和子類Son,它們中各有一個(gè)Testfunc方法,當(dāng)我們實(shí)例化子類的對象sonobj時(shí),可以看到初始化方法中黃色框框調(diào)用了Testfunc,那么這個(gè)時(shí)候執(zhí)行的是哪個(gè)類里面的代碼呢?我會告訴你執(zhí)行的是子類里面的方法,不信就自己試試吧,代碼在下面~

為什么呢?其實(shí)這里是繞了一個(gè)圈,所以把很多人繞暈了,包括我!后來想想其實(shí)很容易,我們看最右邊的圖:

如果這樣看,我們是不是就明白了?其實(shí)這兩段代碼表示的是一個(gè)意思,盡管Son繼承了Base類,父子類中都有同樣的方法,但是由于我們實(shí)例化了子類的對象,所以這個(gè)在初始化方法里的self.Testfunc,self指的是子類的對象,當(dāng)然也就先調(diào)用子類中的方法啦。

所以盡管在第一個(gè)例子中,初始化方法在父類執(zhí)行,但是還是改變不了它是子類對象的本質(zhì),當(dāng)我們使用self去調(diào)用Testfunc方法時(shí),始終是先調(diào)用子類的方法。我們可以這樣理解,盡管兒子繼承了父親的財(cái)產(chǎn),但是花錢的時(shí)候,還是要先花自己的~~~

            
#_*_coding:utf-8_*_
__author__ = 'Eva_J'
class Base(object):
  def __init__(self,name):
    self.name = name
    self.Testfunc()
  def Testfunc(self):
    print 'do Base Testfunc'
class Son(Base):
  def Testfunc(self):
    print 'do Son Testfunc'
sonobj = Son('sonobj')
inherit Code
          

看完剛剛的代碼,我們就知道了對象和self的真實(shí)意義,現(xiàn)在再來回憶一下關(guān)于繼承的順序問題:    

python SocketServer源碼深入解讀_第4張圖片

看上面的代碼,我們猜測一下,執(zhí)行之后,控制臺會打印什么呢?先揭曉答案,會打印Base2方法中的內(nèi)容,原因很簡單:盡管這三個(gè)類中都有同樣的Testfunc方法,但是,由于計(jì)算機(jī)在找方法的時(shí)候,遵循的順序是:Base2,Son,Base,所以它會先找到Base2類,而這個(gè)類中剛好有它要找的方法,它也就歡歡喜喜的拿去執(zhí)行啦!

            
#_*_coding:utf-8_*_
__author__ = 'Eva_J'
class Base(object):
  def Testfunc(self):
    print 'do Base Testfunc'
class Son(Base):
  def __init__(self,name):
    self.name = name
    self.Testfunc()
  def Testfunc(self):
    print 'do Son Testfunc'
class Base2(object):
  def Testfunc(self):
    print 'do Base2 Testfunc'
class GrandSon(Base2,Son):
  pass
#sonobj = Son('sonobj')
sonobj = GrandSon('sonobj')
inherit2 Code
          

畫個(gè)簡易類圖

剛剛我們只是寫了一個(gè)小程序,來說明類之間的繼承和對象調(diào)用方法之間的聯(lián)系,但是如果我們想要hold住一個(gè)繼承關(guān)系復(fù)雜的源碼邏輯,就需要類圖來幫忙!如果你覺得我要教你畫類圖那就大錯(cuò)特錯(cuò)了。。。懶人癥重癥患者是懶得畫那種東西的。。。嘻,先看圖!

python SocketServer源碼深入解讀_第5張圖片

對照類圖看源碼

根據(jù)上面的圖,我們就拿到了threadingTCPServer的相關(guān)類,并且搞清楚了它們之間的繼承關(guān)系和方法,接下來我們對照這張簡易類圖來看看代碼執(zhí)行的過程:

初始化相關(guān)過程:

python SocketServer源碼深入解讀_第6張圖片

執(zhí)行serve_forever的相關(guān)代碼:

python SocketServer源碼深入解讀_第7張圖片

就是這樣,我們一路按照調(diào)用軌跡去尋找,每次看到一個(gè)調(diào)用都先對照上面的簡易類圖,看看有沒有重名方法,如果有,就要找到最近的方法并查看里面的內(nèi)容,以此類推:按照這種方法,就會感覺所有代碼都在一個(gè)文件一樣,媽媽再也不用擔(dān)心我看不懂源碼,哈!!!當(dāng)然啦,這種方法比較山寨,自己心里知道就好,不要告訴別人你其實(shí)是這樣看懂源碼的~~~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产乱码精品一区二区三区四川 | 大片毛片女女女女女女女 | 欧美专区亚洲专区 | 天天做夜夜爽 | 美国一级毛片片aa久久综合 | 亚洲国产美女 | 四虎在线永久精品高清 | 日韩免费毛片视频 | 中文无码久久精品 | 欧美一级aa免费毛片 | 亚洲视频 中文字幕 | 婷婷亚洲综合一区二区 | 波多野吉衣一区二区三区四区 | 特黄特黄aaaa级毛片免费看 | 狼狼色丁香久久婷婷综合五月 | 国产亚洲欧美日韩综合另类 | 国产精品久久久久久久y | 国产1000部成人免费视频 | 夜夜夜夜夜夜爽噜噜噜噜噜噜 | 夜夜骑天天操 | 欧美夜夜撸| 一区二区三区不卡在线 | 中国国产一级毛片 | 国产成人精品亚洲2020 | 天天干天天拍 | 伊人精品成人久久综合欧美 | 欧美最猛的24k毛片视频 | 模特精品视频一区 | 精品国产品香蕉在线观看 | 奇米影视778成人四色狠狠 | 亚洲精品天堂自在久久77 | 欧美日韩久久中文字幕 | 国产精品毛片天天看片 | 麻豆亚洲 | 久久久高清 | 久久国产精品亚洲一区二区 | 视频黄色在线 | 久久精品免费 | 国产成人毛片亚洲精品不卡 | 久久69| 深夜免费看 |