Python學(xué)習(xí)記錄(23)

一、對(duì)象 = 屬性(靜態(tài)) + 方法(動(dòng)態(tài))

二、OO(object oriented) 面向?qū)ο?的特征

1)封裝

2)繼承

3)多態(tài)

三、對(duì)象中的屬性和方法,在編程中實(shí)際是什么?

變量(屬性)和函數(shù)(方法)

四、類和對(duì)象是什么關(guān)系?

類和對(duì)象之間的關(guān)系就如同用模具和用這個(gè)模具制作出來的物品之間的關(guān)系。一個(gè)類為他的全部對(duì)象給出了一個(gè)統(tǒng)一的定義,而他的每個(gè)對(duì)象則是符合這種定義的一個(gè)實(shí)體,因此類和對(duì)象的關(guān)系就是抽象和具體的關(guān)系。

五、類的屬性定義應(yīng)該盡可能抽象還是具體?

正確的做法是盡可能的抽象,因?yàn)檫@樣更符合面向?qū)ο蟮乃季S。

PS:類的實(shí)例化結(jié)果就是對(duì)象,而對(duì)一類對(duì)象的抽象就是類。

類描述了一組有相同特性(屬性)和相同行為(方法)的對(duì)象。

六、如果我們不希望對(duì)象的屬性或方法被外部直接引用,我們可以怎么做?

答:我們可以在屬性或方法名字前邊加上雙下劃線,這樣子從外部是無法直接訪問到,會(huì)顯示AttributeError錯(cuò)誤。

>>> class Person:

__name = "小甲魚"

def getName(self):

return self.__name

>>> p = Person()

>>> p.__name

Traceback (most recent call last):

? File "<pyshell#57>", line 1, in <module>

? ? p.__name

AttributeError: 'Person' object has no attribute '__name'

PS:我們把getName方法稱之為"訪問器"。Python事實(shí)上是采用一種叫"name mangling"技術(shù),將以雙下劃線開頭的變量名巧妙的改了個(gè)名字而已,我們?nèi)匀豢梢栽谕獠客ㄟ^"_類名__變量名"的方式訪問:

>>> p._Person__name

'小甲魚'

當(dāng)然我們并不提倡這種抬杠較真粗暴不文明的訪問形式……

七、類在實(shí)例化后哪個(gè)方法會(huì)被自動(dòng)調(diào)用?

答:__init__方法會(huì)在類實(shí)例化時(shí)被自動(dòng)調(diào)用,我們稱之為魔法方法。你可以重寫這個(gè)方法,為對(duì)象定制初始化方案。

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

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

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