學(xué)習(xí)筆記
# 0,OOP-Python面向?qū)ο?/p>
- Python的面向?qū)ο?/p>
- 面向?qū)ο缶幊?/p>
? ? - 基礎(chǔ)
? ? - 公有私有
? ? - 繼承
? ? - 組合,Mixxi
- 魔法函數(shù)
? ? - 魔法函數(shù)概述
? ? - 構(gòu)造類魔法函數(shù)
? ? - 運(yùn)算類魔法函數(shù)
# 1缸棵,面向?qū)ο蟾攀?ObjectOriented捂齐,00)
- OOP思想
? ? - 接觸到任意一個(gè)任務(wù)半哟,首先想到的是任務(wù)這個(gè)事件的構(gòu)成,是由模型構(gòu)成的
? ? - 幾個(gè)名詞
? ? ? ? - OO:面向?qū)ο?/p>
? ? ? ? - OOA:面向?qū)ο蟮姆治?/p>
? ? ? ? - OOD:面向?qū)ο蟮脑O(shè)計(jì)
? ? ? ? - OOI:XXX的實(shí)現(xiàn)
? ? ? ? - OOP:XXX的編程
? ? ? ? - OOA->OOD->OOI:面向?qū)ο蟮膶?shí)現(xiàn)過程
- 類和對(duì)象的概念
? ? - 類:抽象名詞仅炊,代表一個(gè)集合,共性的事物
? ? - 對(duì)象:具象的事物澎蛛,單個(gè)個(gè)體
? ? - 類跟對(duì)象的關(guān)系
? ? ? ? - 一個(gè)具象代表一類事物的某一個(gè)個(gè)體
? ? ? ? - 一個(gè)是抽象,代表一大類事物
- 類中的內(nèi)容谋逻,應(yīng)該具有兩個(gè)內(nèi)容
? ? - 表明事物的特征呆馁,叫做屬性(變量)
? ? - 表明事物功能或動(dòng)作,稱為成員方法(函數(shù))
# 2毁兆,類的基本實(shí)現(xiàn)
- 類的命名
? ? - 遵守命名的規(guī)范
? ? - 大駝峰(由一個(gè)或者多個(gè)單詞構(gòu)成浙滤,每個(gè)單詞首字母大寫,單詞跟單詞之間直接相連)
? ? - 盡量避開跟系統(tǒng)命名相似的命名
- 如何聲明一個(gè)類
? ? - 必須用class關(guān)鍵字
? ? - 類由屬性和方法構(gòu)成气堕,其他不允許出現(xiàn)
? ? - 成員屬性定義可以直接使用變量賦值纺腊,如果沒有畔咧,允許使用None
? ? - 案例 01
- 實(shí)例化類
? ? ? ? 變量 = 類名()#實(shí)例化了一個(gè)對(duì)象
- 訪問對(duì)象成員
? ? - 使用點(diǎn)操作符
? ? ? ? obj.成員屬性名稱
? ? ? ? obj.成員方法
- 可以通過默認(rèn)內(nèi)置變量檢查類和對(duì)象的所有成員
? ? - 對(duì)象所以成員檢查
? ? ? ? ? ? # dict前后各有連個(gè)下劃線
? ? ? ? ? ? obj.__dict__
案列02
? ? - 類所有成員
? ? ? ? ? ? # dict前后各有兩個(gè)下劃線
? ? ? ? ? ? class_name.__dict__
# 3.和對(duì)象的成員分析
- 類和對(duì)象都可以存儲(chǔ)成員,成員可以歸類所有摹菠,也可以歸對(duì)象所有
- 類存儲(chǔ)成員時(shí)使用的是與類關(guān)聯(lián)的一個(gè)對(duì)象
- 獨(dú)享存儲(chǔ)成員是存儲(chǔ)再當(dāng)前的對(duì)象中
- 對(duì)象訪問一個(gè)成員時(shí)盒卸,如果對(duì)象中沒有該成員,嘗試訪問類中的同名成員次氨,
? 如果對(duì)象中有此成員蔽介,一定使用對(duì)象中的成員。
- 創(chuàng)建對(duì)象的時(shí)候煮寡,類中的成員不會(huì)放入對(duì)象中虹蓄,而是得到一個(gè)空對(duì)象,沒有成員
- 通過對(duì)象對(duì)類中成員重新賦值或者通過對(duì)象添加新成員時(shí)幸撕,對(duì)應(yīng)成員會(huì)保存
? 在對(duì)象中薇组,而不會(huì)修改類成員。
# 5坐儿,關(guān)于self
- self在對(duì)象的方法中表示當(dāng)前對(duì)象本身律胀,如果通過對(duì)象調(diào)用一個(gè)方法,那么該對(duì)象會(huì)自動(dòng)傳入
? 到當(dāng)前方法的第一個(gè)參數(shù)中
- self并不是關(guān)鍵字貌矿,質(zhì)只是一個(gè)用于接受對(duì)象的普通參數(shù)炭菌,理論上可以用任何一個(gè)普通變量代替
- 方法中有self形參的方法稱為非綁定類的方法,可以通過對(duì)象訪問逛漫,沒有self的時(shí)綁定類的方法
? 黑低,只能通過類訪問。
- 使用類訪問綁定類的方法時(shí)酌毡,如果方法中需要訪問當(dāng)前類的成員克握,可以通過__class__成員來訪問。
案例03枷踏,04
# 6菩暗,面向?qū)ο蟮娜筇匦?/p>
- 封裝
- 繼承
- 多態(tài)
## 6.1,封裝
- 封裝就是對(duì)對(duì)象的成員進(jìn)行訪問限制
- 封裝的三個(gè)級(jí)別:
? ? - 公開旭蠕,public
? ? - 受保護(hù)的勋眯,protected
? ? - 私有的,private
? ? - public下梢,protected客蹋,private不是關(guān)鍵字
- 判別對(duì)象的位置
? ? - 對(duì)象內(nèi)部
? ? - 對(duì)象外部
? ? - 子類中
- 私有
? ? - 私有成員是最高級(jí)別的封裝,只能在當(dāng)前類或?qū)ο笾性L問
? ? - 在成員前面加兩個(gè)下劃線即可
? ? ? ? class Person():
? ? ? ? ? ? #name是共有的成員
? ? ? ? ? ? name = "liuyang"
? ? ? ? ? ? # __age就是私有成員
? ? ? ? ? ? __age = 18
? ? - python的私有不是真私有孽江,是一種成為name mangling的改名策略
? ? ? 可以使用對(duì)象讶坯,_classname__attributename訪問
案例05:
- 受保護(hù)的封裝 protected
? ? - 受保護(hù)的封裝是將成員進(jìn)行一定級(jí)別的封裝,然后岗屏,在類中或者子類中都
? ? ? 可以進(jìn)行訪問辆琅,但是外部不可以
? ? - 封裝方法:在成員稱前添加一個(gè)下劃線即可
- 【python下劃線的使用】(http://blog.csdn.net/handsomekang/article/details/40303207)