1. 程式人生 > >python——第7章 再談抽象

python——第7章 再談抽象

再談抽象

  • 多型
  • 封裝
  • 繼承
  1. 要讓方法或屬性成為私有的(不能從外部訪問),只需讓其名稱以兩個下劃線打頭即可。

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) 返回物件的型別