類和面向?qū)ο?(day15總結(jié))

1.私有化

讓屬性和方法只能在類的內(nèi)部使用,不能在類的外部使用

1)語法:

聲明屬性或者方法的時(shí)候,在屬性名或者方法名前加'__'

2)python私有化的原理

python并不能像java一樣從訪問權(quán)限上去限制屬性和方法,沒有真正的私有屬性和方法。
私有化只是在兩個(gè)下劃線開頭的名字前加前綴'_類名',導(dǎo)致不能直接通過原名進(jìn)行訪問

2.對象屬性的保護(hù)

1.不要直接訪問或者修改對象屬性的值,而是通過屬性訪問器(getter)和修改器(setter)去操作對象屬性
2.需要添加getter或者setter的對象屬性,屬性命名的時(shí)候需要在最前面加''。
(添加'
'的目的是為了告訴使用者,這個(gè)屬性我給它添加了getter或者setter)

1)getter - 獲取屬性的值(間接)

a.語法:
@property
def 函數(shù)名(self):
其他語句
return 屬性值

通過不帶下劃線去獲取屬性的值的時(shí)候,本質(zhì)是在調(diào)用屬性對應(yīng)的getter方法,結(jié)果是getter的返回值

b.說明:
函數(shù)名 - 對應(yīng)的屬性名去掉下劃線
屬性值 - 和對應(yīng)的有下劃線的屬性值有關(guān)聯(lián)

c.什么時(shí)候用
如果希望在獲取某個(gè)屬性的值之前干點(diǎn)別的事情,就給這個(gè)屬性添加getter

2)setter - 給屬性賦值(間接)

想要添加setter必須先添加getter
a.語法:
@getter名.setter
def 函數(shù)名(self, 參數(shù)):
其他語句
self.屬性 = 值

c.什么時(shí)候用
如果在給屬性賦值之前干點(diǎn)兒別的事情,就給這個(gè)屬性添加setter

3.類中的方法: 對象方法、類方法、靜態(tài)方法

1)對象方法

a.怎么聲明: 直接聲明在類中
b.特點(diǎn): 有默認(rèn)參數(shù)self;調(diào)用的時(shí)候不用傳參,指向當(dāng)前對象
c.怎么調(diào)用: 通過對象來調(diào)用(對象.對象方法())
d.什么時(shí)候使用: 如果實(shí)現(xiàn)函數(shù)的功能,需要使用對象屬性,就用對象方法

2)類方法

a.怎么聲明: 聲明函數(shù)前添加@classmethod裝飾器
b.特點(diǎn): 有默認(rèn)參數(shù)cls; 調(diào)用的時(shí)候不用傳參, 系統(tǒng)將調(diào)用這個(gè)方法的類傳給它,指向當(dāng)前類
c.怎么調(diào)用: 通過類來調(diào)用
d.什么時(shí)候使用: 在不需要對象屬性的前提下,需要類的字段,就使用類方法
(cls:當(dāng)前類,當(dāng)前類能做的事情,cls都能做)

3)靜態(tài)方法

a.怎么聲明:聲明前添加@staticmethod裝飾器
b.特點(diǎn): 沒有默認(rèn)參數(shù)
c.怎么調(diào)用: 通過類來調(diào)用
d.什么時(shí)候使用: 既不需要對象屬性也不需要類的字段,就使用靜態(tài)方法

4.繼承

繼承者 - 子類
被繼承者 - 父類
繼承 - 讓子類直接擁有父類的屬性和方法

1.語法:

class 類名(父類):
類的內(nèi)容

2.在子類中添加內(nèi)容

1)在子類中添加字段和方法
直接在子類中聲明新的字段和方法
2)添加對象屬性
在子類中實(shí)現(xiàn)init方法,并且添加新屬性。同時(shí)需要通過super().init()去調(diào)用父類的init方法

補(bǔ)充: 類中的函數(shù)的調(diào)用過程
先看當(dāng)前類中是否有這個(gè)方法,如果有直接調(diào)用自己的方法;沒有就去看父類有沒有這個(gè)方法,如果有就調(diào)用父類的方法;
如果父類也沒有就找父類的父類,以此類推, 如果直到找到object都沒有找到這個(gè)方法,才報(bào)錯(cuò)!

python中所有的類默認(rèn)都是繼承object, object是python中所有類的基類

3.重寫

在子類中重新實(shí)現(xiàn)父類的函數(shù); 可以通過super()去調(diào)用父類中的方法。
注意: super()不能在靜態(tài)方法中使用,只能在對象方法和類方法中用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,631評論 1 32
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,123評論 2 9
  • 1. 使用 #import 相對c的 include 是防止頭文件的重復(fù)導(dǎo)入 2. NSLog 相對于 print...
    迎風(fēng)起飛的豬閱讀 1,971評論 6 9
  • 朦朦朧朧之中,被一陣陣手機(jī)鬧鈴聲喚醒,透過窗戶往外看,天空已經(jīng)有一點(diǎn)點(diǎn)泛白。柔柔眼睛,掀開被子。戀戀不舍的離...
    瘋狂的石頭cxk閱讀 826評論 3 11
  • 碰見了一傻子,我問了那么多的問題都還執(zhí)迷不悟?假設(shè)事情真實(shí),這男人醒悟來的時(shí)候會(huì)做出如何反應(yīng)? 豪情沖天,孤注一擲...
    園園0605閱讀 196評論 0 0

友情鏈接更多精彩內(nèi)容