Python筆記07-類和對象

面向對象的三大特性:繼承、封裝、多態。

【多態】

1.標準庫random中包含choice函數,可以從序列中隨機選出元素。

2. 多態的體現:如下案例,+的兩種作用。

然後可以定義成函數:

定義一個打印對象長度的函數,注意:repr函數的使用——repr函數是多態特性的代表之一。

【創建類】

[代碼 01.py]

特性可以在外部訪問:

可以將特性綁定到一個普通函數上[代碼02.py]:

【私有方式】

Python並不直接支持私有方式,爲了讓方法或者特性變爲私有(從外部無法訪問),只要在名字前面加上雙下劃線即可:

【類的命名空間】

定義類時,所有位於class語句中的代碼都在特殊的命名空間中執行——類命名空間。

下面案例的init用來初始化所有實例:

如果在實例中重新綁定mem的特性:

【指定超類】

[代碼 03.py]

上面案例中, SPAMFilter 類 繼承了 Filter類,寫法: class Child(Father):

【繼承】

如果要查看一個類是否是另一個類的子類,使用內建的 issubclass 函數:

如果想要知道已知類的基類(們),可以直接使用它的特殊特性: __bases__

同樣,還能使用 isinstance 方法檢查一個對象是否是一個類的實例:

如果只想知道一個對象屬於哪個類,可以使用 __class__ 特性:

【多個超類】

__bases__ 複數形式說明了 它的基類可能會多於一個。(04.py)

上面這種行爲稱爲:多重繼承。

【接口和內省】

只需要讓對象符合當前的接口(也就是實現當前的方法)。

下例:判斷對象tc是否有叫做“talk”和“fnord”的特性。

還可以檢查talk特性是否可調用:

與 getattr 相對應的函數是: setattr,用來設置對象的特性:

如果要查看對象內所有存儲的值,可以使用 __dict__ 特性。

【總結】

【代碼】https://github.com/rxbook/study-python/tree/master/07

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章