解讀python中SocketServer源碼

來源:互聯網
上載者:User

標籤:列印   obj   初始化   說明   style   類的方法   sel   一個   使用   

在看SocketServer源碼之前,先看一個例子:

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‘)
View Code

 

 

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‘)sonobj = Son(‘sonobj‘)
View Code

 

這是一個簡單的類繼承,我們可以看到父類Base和子類Son,它們中各有一個Testfunc方法,當我們執行個體化子類的對象sonobj時,可以看到初始化方法中黃色框框調用了Testfunc,那麼這個時候執行的是哪個類裡面的代碼呢?我會告訴你執行的是子類裡面的方法!

其實這兩段代碼錶示的是一個意思,儘管Son繼承了Base類,父子類中都有同樣的方法,但是由於我們執行個體化了子類的對象,所以這個在初始化方法裡的self.Testfunc,self指的是子類的對象,當然也就先調用子類中的方法啦。所以儘管在第一個例子中,初始化方法在父類執行,但是還是改變不了它是子類對象的本質,當我們使用self去調用Testfunc方法時,始終是先調用子類的方法。

 

看完剛剛的代碼,我們就知道了對象和self的真實意義,現在再來看看關於繼承的順序問題:

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‘)
View Code

 

看上面的代碼,我們猜測一下,執行之後,控制台會列印什麼呢?先揭曉答案,會列印Base2方法中的內容,原因很簡單:儘管這三個類中都有同樣的Testfunc方法,但是,由於電腦在找方法的時候,遵循的順序是:Base2,Son,Base,所以它會先找到Base2類,而這個類中剛好有它要找的方法,它也就拿去執行啦!

 

為了更好的來說明類之間的繼承和對象調用方法之間的聯絡,我們需要畫個簡易的類圖:

 

 

對照類圖看源碼

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

  初始化相關過程:

 

   執行serve_forever的相關代碼:

 

就是這樣,我們一路按照調用軌跡去尋找,每次看到一個調用都先對照上面的簡易類圖,看看有沒有重名方法,如果有,就要找到最近的方法並查看裡面的內容,以此類推:按照這種方法,就會感覺所有代碼都在一個檔案一樣

解讀python中SocketServer源碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.