目錄
1 ⾯向對象的思想
⾯向過程:⾯向處理,更多的是從計算機⻆度思考,注重計算每⼀個步驟,程序更像是⼀本cpu操作⼿冊。
⾯向對象:以⽇常⽣活的⻆度思考問題的解決,更接近⼈的思維⽅式,讓⼈可以從更⾼的層⾯考慮系統的構建
以你請朋友喫飯爲例:
⾯向對象的優點:
- ⾯向對象更加適合做應⽤的開發
- ⾯向對象可以使你的代碼更加優雅和緊湊
- ⾯向對象開發效率更⾼
- ⾯向對象代碼復⽤度更⾼、可維護性更好
⾯向對象是⼀種思維⽅式,它認爲萬事萬物皆對象,程序是由多個對象協作共同完成功能的,所以以後我們要從⾯向過程轉向⾯向對象。以⾯向對象的⽅式考慮程序的構建。⾯向對象的核⼼是: 類和對象
2. 類和對象
2.1 類和對象的概念
⽣活⻆度
- 類:具有相同特徵和⾏爲的對象的集合,是⼀個概念
- 對象:客觀存在的⼀切事物,是類的實例
類: 汽⻋ 超級英雄 電腦 杯⼦
對象: 紅⾊的寶⻢ 美國隊⻓ 桌上的mac pro ⽼王的⿊⾊杯⼦
程序⻆度
- 類:⽤戶⾃定義的數據類型,是模板,不佔⽤內存
- 對象:由類定義的變量,佔⽤內存
2.2 類的定義
注意:
- 類定義必須以關鍵字class開頭
- 類名要符合標識符的規範
- 類名⼀般⽤⼤駝峯⻛格: 每個單詞⾸字⺟⼤寫,其它⼩寫 ,例如MyBook YouMoney
- 類體必須縮進
- 在python3中類默認繼承object,所以可以這樣寫 class Dog:,它等價於class Dog(object):
- ⼀個⽂件⾥只放⼀個類
2.3 成員⽅法
成員⽅法其實就是函數,作⽤域在類內,成員⽅法的第⼀個參數必須是self, self代表當前對象,也就是調⽤這個⽅法的對象,這個參數由系統傳遞。
注意:
- self參數在調⽤的時候不必傳值,由系統傳值
- self只能在實例⽅法中使⽤
- ⽅法和函數的區別:
- ⽅法作⽤域屬於類,所以即便和普通函數重名,也不會被覆蓋
- ⽅法的第⼀個參數必須是self,但函數不要求
- ⽅法必須通過對象調⽤,⽽函數不需要
- ⽅法的第⼀個參數self其實可以使任何合法標識符,不過⼀般約定俗成都是self
- ⽅法的連貫調⽤
2.4 對象的創建
對象的創建過程也稱之爲對象的實例化過程,也就是定義了⼀個類類型的變量或者稱之爲實例(instance)的過程
2.5 成員屬性
成員屬性描述的是對象的靜態特徵,⽐如說狗名字、品種等,其實就是⼀個變量,作⽤域屬於對象,不會和類外的全局變量衝突。 python中成員屬性可以在構造函數中添加。成員屬性屬於對象,每個對象的成員屬性的值都不同在構造函數中添加的屬性屬於所有對象(重點)
3 構造和析構
3.1 構造⽅法
- ⽬的:構造⽅法⽤於初始化對象(不創建對象),可以在構造⽅法中添加成員屬性
- 時機:實例化對象的時候⾃動調⽤
- 參數:第⼀個參數必須是self,其它參數根據需要⾃⼰定義
- 返回值:不返回值,或者說返回None,不應該返回任何其他值
注意:
- 如果沒有定義構造⽅法,系統會⽣成⼀個⽆參構造⽅法,如果⾃⼰定義了構造⽅法,則系統不會⾃動⽣成
- ⼀個類只能有⼀個構造⽅法,如果定義多個,後⾯的會覆蓋前⾯的
- 構造函數由系統在實例化對象時⾃動調⽤,不要⾃⼰調⽤
3.2 析構⽅法
- ⽬的:對象銷燬時,釋放資源
- 時機:對象銷燬時由系統⾃動調⽤
- 參數:除了self外,沒有其他參數
- 返回值:不返回值,或者說返回None。
語法:
3.3 __str__
- ⽬的:將對象轉化爲字符串
- 時機:凡是涉及對象向字符串轉換的都會調⽤(print,str)
- 參數: self
- 返回值:字符串
__repr__ 作⽤同 __str__ ,不過是給解釋器看的