Windows Azure隊列與服務匯流排隊列的比較

來源:互聯網
上載者:User

標籤:python   文檔   翻譯   

6.5.1 多重繼承

Python也支援多種繼承形式。一個能繼承多個基類的類定義如下:

class DerivedClassName(Base1, Base2, Base3):

<statement-1>

.

.

.

<statement-N>

大多數情況,最簡單而言,你可以把從父類繼承下來的屬性查詢看成是遵循深度優先,從左至右。

而不是在同一等級重複的同樣類中執行兩次。因此,如果一個屬性沒在衍生類別中找到,首先會在base1然後再base1的基類中,如果在那裡都沒發現,就會在base2中尋找等等。

事實上,比剛才說的稍微有點複雜。方法執行順序為了協同調用super()而動態變化。這種方法在一些支援多重繼承的語言中因調用接下來方法非常出名。並且要比單繼承語言中的super調用更強大。

動態排序是必須的,因為多重繼承中所有情況顯示至少一個菱形關係。(從最底層的類開始,至少存在一個父類可以通過多條路徑訪問)。例如,所有的的類繼承object, 因此多種繼承的每種情況提供至少一種路徑到達object. 為了保證至少有一種方法訪問基類,動態演算法用一種特別方法線性化了搜尋順序。這種方法就是保證在每個類按從左至右的順序,每個父類只有一次,並且那是不變的。(即繼承一個類不會一項它父類的優先順序),總之,這些屬性讓使用多重繼承設計可靠的和可擴充的類成為可能。更多資訊請參考:

6.6 私人變數

除了對象內部其他都不能訪問的“私人”變數在python中是不存在的。但是,大多數python代碼都遵守一個規則:以底線為首碼的名稱被看成是API的非公用部分。它可以認為是一個細節實現並且改變時不需通知。

 

因為存在類私人成員的合法用例(即為了避免在子類定義的名稱想衝突),所有存在對這種機制的限制支援。這種機制叫名稱變換。_spam形式的任何標識符(至少是兩個開頭底線,最多一尾底線)在書面上可以被_classname_spam代替,這裡classname是當前的類名。 只要這種變換出現在類定義中,那麼這個不涉及到標識符的文法位置就可以處理。

名字變換對於讓子類在不影響父類方法前提下重載方法很有重要意義。例如:


這種變換規則最初設計是為了避免衝突,如果強意要訪問或者修改一個被認為私人變數,仍然是可以的。在一些特別的情況下,這種方法更加有用。例如調試器。

注意傳給exec()或者eval()的代碼不會將調用類作為當前類,這個很global全域變數的效果相似。它的作用限制於一起進行位元組碼編譯的代碼。同樣的限制也適用於getattr(),settattr()和delattr()函數,以及直接引用_dict_時。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.