面向對象總複習:python
面向過程編程思想:
核心是過程,過程指的是作事情的步驟,即先幹什麼再幹什麼。
基於該編程思想編程,就比如一條流水線,一種機械式的思惟方式。linux
面向對象編程思想:
核心是對象,對象指的是特徵與技能的結合體。
基於該編程思想編程,就比如創造世界,一種上帝式的思惟方式。面試
類:
類指的是一系列對象相同的特徵與技能的結合體。編程
如何定義類:
先抽象,抽取對象之間相同的特徵與技能。
再定義類。安全
定義類時會發生哪些事情:
1.會產生一個類的名稱空間
2.會把類內部的全部名字,扔進該名稱空間中
注意: 定義類時,就會執行類內部的代碼,若語法不正確,則會報錯。架構
如何產生對象:
調用類會產生一個對象,調用類的過程稱之爲類的實例化,對象稱之爲類的一個實例。函數
init: 調用類時觸發該方法。測試
調用類時發生的事情:
1.調用類會產生一個對象的名稱空間。
2.會觸發__init__,接着把對象與括號內全部的參數都傳給__init__(),對象看成第一個參數。
3.在__init__內部,能夠給對象添加屬性。大數據
對象的名字查找:
1.先找對象本身的
2.若對象沒有,則去類中查找
3.類中沒有,則會默認繼承object類中查找架構設計
對象的綁定方法特殊之處:
類來調用,類內部的方法只是一個普通函數,函數須要幾個參數就傳幾個。
對象的綁定方法,由對象來調用,會自動把對象看成第一個參數傳給該方法。
注意: 不一樣的對象調用對象的綁定方法,會綁定給不一樣的對象。
一切皆對象:
在python中一切皆對象。
python八大數據類型皆爲對象: n = 10 # n = int(10) list tuple set dict float bool str 內置函數: filter
人狗大戰:
人咬狗
狗又咬人
人狗互咬。
繼承:
繼承指的是新建類的方式,新建的類指的子類或派生類,
子類能夠繼承一個父類,父類又能夠稱之爲基類或超類。
如何查找繼承關係:
必須遵循「先抽象,再繼承」
抽象:
抽取類似的部分。
class Father:
pass
class Sub(Father):
pass
*******繼承關係:
類是對象與對象之間的關係,類是一系列對象相同的特徵與技能的結合體。
繼承是類與類之間的關係,子類與父類是一種從屬關係。
派生:
派生指的子類繼承父類的屬性,並派生出本身的屬性。
子類能夠派生本身的屬性,並重用父類的屬性
1.直接調用類,類名.屬性的方式重用父類的屬性。
2.super(),super().指向的父類的名稱空間,重用父類的屬性。
注意: 子類派生出與父類相同的屬性,以子類的爲主。
在繼承背景下,對象屬性的查找順序
1.先從對象的名稱空間中查找
2.去類的名稱空間中查找
3.去父類的名稱空間中查找
4.去object裏面查找,若沒有則報錯。
新式類與經典類:
繼承object的類,都稱之爲新式類。
在python2中,沒有繼承object的類,都稱之爲經典類。
鑽石繼承(菱形繼承):
新式類: 廣度優先 經典類: 深度優先
組合:
組合指的是一個對象的屬性,是另外一個對象。
組合的做用,與繼承同樣,都是解決代碼冗餘問題。 繼承的優勢: 編寫的複雜程度沒有組合高。 繼承的缺點: 耦合度過高,可擴展性差。 組合的優勢: 可讓類與類之間解耦合, 可擴展性高。 組合的缺點: 編寫的複雜程度高於繼承。
封裝:
封裝指的是把一堆屬性,封裝到對象中,對象就比如一個袋子,或一個容器。
優勢:
方便數據的存取。
能夠經過「對象.屬性」的方式獲取/取數據與方法。
封裝是面向對象的核心。
訪問限制機制:
在類內部,凡是以__開頭的屬性,都會被隱藏,實際是變形--> _類名__屬性
好處: 能夠對一些重要的數據進行隱藏,不輕易被直接調用,保證數據的安全。 好比與金錢、用戶信息相關的操做。
property:
讓看起來像動詞的方法,變成以名詞的方式調用。
方法名 不須要加括號調用。
多態:
同一種事物的多種形態。
水: 液態水、固態水、氣態水
多態的目的: 爲了統一代碼編寫的規範。 多態的實現方式: 繼承: 子類繼承父類的特徵與技能。 抽象類: 1.導入一個abc模塊 2.讓父類繼承一個ABCMeta 3.給類內部全部的方法加上abc.abstractmethod裝飾器 子類繼承抽象類,強制讓子類繼承父類的方法,缺一不可。 鴨子類型: 只要長得像鴨子,而且叫聲、行爲與鴨子一摸同樣,那麼就是鴨子。 同一種事物的類,都有相同的功能,該這些類都在內部定義相同名稱的方法。
classmethod:
是一個裝飾器,用來裝飾在類內部的方法,可讓該方法變成類的綁定方法。
對象綁定方法:
由對象來調用,會把對象看成第一個參數傳給該方法。
類的綁定方法: 由類來調用,會把類看成第一個參數傳給該方法。
staticmethod:
是一個裝飾器,用來裝飾在類內部的方法,可讓該方法變成非綁定方法。
非綁定方法特殊之處: 由誰來調用都是一個普通函數。
面向對象高級:
- isinstance:
判斷對象是不是類的一個實例。
- issubclass: 判斷一個類是不是另外一個類的子類。 - 反射: 經過字符串操做對象或類的屬性。 hasattr: 判斷字符串是不是一個對象或類的屬性。 getattr: 經過字符串獲取一個對象或類的屬性,若沒有默認是None。 getattr('對象或類', '字符串屬性名', '自定義的默認值') setattr: 經過字符串設置一個對象或類的屬性。 setattr('對象或類', '字符串屬性名', '屬性的值') delattr: 經過字符串刪除一個對象或類的屬性。 delattr('對象或類', '刪除的字符串屬性名') - 魔法方法(類的內置方法): - __init__: 在調用類時觸發,在__new__沒有返回一個空對象時不會觸發。 - __new__: 在__init__執行前觸發,必需要返回一個空對象。 - object.__new__(cls) # cls --> 當前類 - __str__: 在打印對象時觸發。 - __getattr__: 會在 對象.屬性,屬性沒有時觸發。 在類內部有__getattribute__,就不會執行__getattr__。 - __getattribute__: 會在 對象.屬性,無論屬性有沒有都會觸發。 *******面試題:__getattr__與__getattribute__的區別。 - __setattr__: 會在 對象.屬性=屬性值 時觸發。 - __del__: 會在對象被銷燬前觸發。 - __call__: 會調用對象時執行。 - __delattr__: 會在對象刪除屬性時觸發。
單例模式:
單例指的是,調用一個類時實例化獲得多個對象時,對象指向同一個對象名稱空間。
- @classmethod - __new__
選課系統:
1.需求分析
2.程序的架構設計 3.分任務開發 4.測試 5.上線運營
需求:
用戶能夠操做的界面:
1.管理員
註冊
登陸
建立學校 - 學校名稱 - 學校地址 建立老師 - 用戶名 - 密碼 建立課程 - 選擇校區 - 課程名稱 課程綁定給校區 2.學生 註冊 登陸 選擇學校 - 一個學生只能選擇一個學校 選擇課程 - 一個學生能夠選擇多門課程 查當作績 - 學生能夠查找本身的成績 3.老師 登陸 查看教授課程 選擇教授課程 查看課程學生 修改學生成績