阿裡雲天池 Python訓練營 Task08
-
學習連結:
https://tianchi.aliyun.com/s/58327c15d1faee512c008128d3bb9e32
-
今日學習任務:
Task 3 中的一個章節:
(1) 類與對象
-
記錄筆記:
學習完成之後,選擇任意平台進行自我知識總結即可(今天學到了什麼将來可能需要複習的知識點,用筆記來友善自己複習)知乎、CSDN、Github等。(如果對記筆記有疑惑,歡迎讨論)

類與對象
對象 = 屬性 + 方法
對象是類的執行個體。換句話說,類主要定義對象的結構,然後我們以類為模闆建立對象。類不但包含方法定義,而且還包含所有執行個體共享的資料。
- 封裝:資訊隐蔽技術
使用關鍵字 class 定義 Python 類,關鍵字後面緊跟類的名稱、分号和類的實作。
- 繼承:子類自動共享父類之間資料和方法的機制
- 多态:不同對象對同一方法響應不同的行動
self 是什麼?
Python 的 self 相當于 C++ 的 this 指針。
類的方法與普通的函數隻有一個特别的差別 —— 它們必須有一個額外的第一個參數名稱(對應于該執行個體,即該對象本身),按照慣例它的名稱是 self。在調用方法時,我們無需明确提供與參數 self 相對應的參數。
Python 的魔法方法
類有一個名為__init__(self[, param1, param2…])的魔法方法,該方法在類執行個體化時會自動調用。
公有和私有
在 Python 中定義私有變量隻需要在變量名或函數名前加上“__”兩個下劃線,那麼這個函數或變量就會為私有的了。
繼承
Python 同樣支援類的繼承。
BaseClassName(基類名)必須與派生類定義在一個作用域内。除了類,還可以用表達式,基類定義在另一個子產品中時這一點非常有用。
- 調用未綁定的父類方法Fish.init(self)
- 使用super函數super().init()
Python 雖然支援多繼承的形式,但我們一般不使用多繼承,因為容易引起混亂。
組合
類、類對象和執行個體對象
類對象:建立一個類,其實也是一個對象也在記憶體開辟了一塊空間,稱為類對象,類對象隻有一個。
類屬性:類裡面方法外面定義的變量稱為類屬性。類屬性所屬于類對象并且多個執行個體對象之間共享同一個類屬性,說白了就是類屬性所有的通過該類執行個體化的對象都能共享。
執行個體對象:就是通過執行個體化類建立的對象,稱為執行個體對象,執行個體對象可以有多個。
執行個體屬性:執行個體屬性和具體的某個執行個體對象有關系,并且一個執行個體對象和另外一個執行個體對象是不共享屬性的,說白了執行個體屬性隻能在自己的對象裡面使用,其他的對象不能直接使用,因為self是誰調用,它的值就屬于該對象。
注意:屬性與方法名相同,屬性會覆寫方法。
什麼是綁定?
Python 嚴格要求方法需要有執行個體才能被調用,這種限制其實就是 Python 所謂的綁定概念。
Python 對象的資料屬性通常存儲在名為.__ dict__的字典中,我們可以直接通路__dict__,或利用 Python 的内置函數vars()擷取.__ dict__。
相關的内置函數(BIF)
- issubclass(class, classinfo) 方法用于判斷參數 class 是否是類型參數 classinfo 的子類。
- isinstance(object, classinfo) 方法用于判斷一個對象是否是一個已知的類型,類似type()。
- hasattr(object, name)用于判斷對象是否包含對應的屬性。
- getattr(object, name[, default])用于傳回一個對象屬性值。
- setattr(object, name, value)對應函數 getattr(),用于設定屬性值,該屬性不一定是存在的。
- delattr(object, name)用于删除屬性。
- class property([fget[, fset[, fdel[, doc]]]])用于在新式類中傳回屬性值。