python——第7章 再談抽象
阿新 • • 發佈:2018-12-15
再談抽象
- 多型
- 封裝
- 繼承
- 要讓方法或屬性成為私有的(不能從外部訪問),只需讓其名稱以兩個下劃線打頭即可。
7.2.5 類的名稱空間
在class語句中定義的程式碼都是在一個特殊的名稱空間內執行的,類的所有成員都可訪問這個名稱空間。類定義其實就是要執行的程式碼段。
在類定義中,並非只能包含def語句。
7.2.6 指定超類
7.2.7 深入探討繼承
- 如果你有一個類,並想知道它的基類,可訪問其特殊屬性__bases__。
7.2.8 多個超類
多重繼承 是一個功能強大的工具。然而,除非萬不得已,否則應避免使用多重繼承,因為在有些情況下,它可能帶來意外的“併發症”。
使用多重繼承時,有一點務必注意:如果多個超類以不同的方式實現了同一個方法(即有多個同名方法),必須在class語句中小心排列這些超類,因為位於前面的類的方法將覆蓋位於後面的類的方法。因此,在前面的示例中,如果Calculator類包含方法talk,那麼這個方法將覆蓋Talker
類的方法talk(導致它不可訪問)。如果像下面這樣反轉超類的排列順序:
class TalkingCalculator(Talker, Calculator): pass
將導致Talker的方法talk是可以訪問的。多個超類的超類相同時,查詢特定方法或屬性時訪問超類的順序稱為方法解析順序(MRO),它使用的演算法非常複雜。所幸其效果很好,你可能根本無需擔心。
7.2.9 介面和內省
瑤池和狂野
7.2.10 抽象基類
7.4.1 本章介紹的新函式
函 數 | 描 述 |
---|---|
callable(object) | 判斷物件是否是可呼叫的(如是否是函式或方法) |
getattr(object,name[,default]) | 獲取屬性的值,還可提供預設值 |
hasattr(object, name) | 確定物件是否有指定的屬性 |
isinstance(object, class) | 確定物件是否是指定類的例項 |
issubclass(A, B) | 確定A是否是B的子類 |
random.choice(sequence) | 從一個非空序列中隨機地選擇一個元素 |
setattr(object, name, value) | 將物件的指定屬性設定為指定的值 |
type(object) | 返回物件的型別 |