socketserver源碼解讀

   在看源碼以前咱們先來看看有關繼承的知識(看源碼就是在找繼承關係----我的理解)ide

      繼承 :    spa

 

                                                                       

 

         咱們先看上面的代碼,這是一個簡單的類繼承,咱們能夠看到父類Base和子類Son,它們中各有一個Testfunc方法,當咱們實例化子類的對象sonobj時,能夠看到初始化方法中黃色框框調用了Testfunc,那麼這個時候執行的是子類裏面的方法.code

  咱們看最右邊的圖:server

  其實這兩段代碼表示的是一個意思,儘管Son繼承了Base類,父子類中都有一樣的方法,可是因爲咱們實例化了子類的對象,因此這個在初始化方法裏的self.Testfunc,self指的是子類的對象,固然也就先調用子類中的方法啦。因此儘管在第一個例子中,初始化方法在父類執行,可是仍是改變不了它是子類對象的本質,當咱們使用self去調用Testfunc方法時,始終是先調用子類的方法。咱們能夠這樣理解,儘管兒子繼承了父親的財產,可是花錢的時候,仍是要先花本身的,等本身的錢花沒了再去找父親要.對象

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')
代碼

 

  而後,咱們看來看看繼承的順序 : blog

 

      這三個類中都有一樣的Testfunc方法,可是,因爲計算機在找方法的時候,遵循的順序是:Base2,Son,Base,因此它會先找到Base2類,而這個類中恰好有它要找的方法,因此也就執行了.繼承

       源碼解讀             源碼

 

 

 

 

 照圖看源碼 : it

      根據上面的圖,咱們就拿到了threadingTCPServer的相關類,而且搞清楚了它們之間的繼承關係和方法,接下來咱們對照這張簡易類圖來看看代碼執行的過程:event

 

 

 執行server_forever 相關代碼 : 

 

        就是這樣,咱們一路按照調用軌跡去尋找,每次看到一個調用都先對照上面的簡易類圖,看看有沒有重名方法,若是有,就要找到最近的方法並查看裏面的內容,以此類推...

      注意 : 這種方法屬於"大白話"

相關文章
相關標籤/搜索