一、對(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ì)象定制初始化方案。