在 Python 中,面向?qū)ο缶幊讨饕袃蓚€(gè)主題缚忧,就是類和類實(shí)例糕非。
類與實(shí)例:
類與實(shí)例相互關(guān)聯(lián)著:類是對(duì)象的定義,而實(shí)例是"真正的實(shí)物"持钉,它存放了類中所定義的對(duì)象的具體信息每强。類是抽象的,在使用的時(shí)候通常會(huì)找到這個(gè)類的一個(gè)具體的存在,使用這個(gè)具體的存在空执。一個(gè)類可以找到多個(gè)對(duì)象辨绊。
類(Class) 由3個(gè)部分構(gòu)成
類的名稱:類名
類的屬性:一組數(shù)據(jù)
類的方法:允許對(duì)進(jìn)行操作的方法 (行為)
1门坷、定義類
例:定義類
2、創(chuàng)建對(duì)象
python中敏簿,可以根據(jù)已經(jīng)定義的類去創(chuàng)建出一個(gè)個(gè)對(duì)象,創(chuàng)建對(duì)象的格式為蜻势,對(duì)象名 = 類名()
例:創(chuàng)建對(duì)象
利用一個(gè)變量接收創(chuàng)建的對(duì)象甫菠,實(shí)例對(duì)象可以調(diào)用類的方法寂诱,還可以為類設(shè)置屬性痰洒。我們可以利用__init__()方法在創(chuàng)建實(shí)例對(duì)象時(shí)脯宿,就為對(duì)象指定屬性连霉。
3跺撼、__init__()方法
創(chuàng)建類時(shí)财边,可以定義一個(gè)特定的方法酣难,名為_(kāi)_init__()憨募,只要?jiǎng)?chuàng)建這個(gè)類的一個(gè)實(shí)例就會(huì)運(yùn)行這個(gè)方法珠漂∠蔽#可以向__init__()方法傳遞參數(shù)待笑,這樣創(chuàng)建對(duì)象時(shí)就可以把屬性設(shè)置為你希望的值__init__()這個(gè)方法會(huì)在創(chuàng)建對(duì)象時(shí)完成初始化。
例:調(diào)用__init__()方法
在沒(méi)有調(diào)用__init__()方法的前提下,實(shí)例對(duì)象就默認(rèn)擁有了2個(gè)屬性wheelNum和color,原因是__init__()方法是在創(chuàng)建對(duì)象后浅悉,就立刻被默認(rèn)調(diào)用了术健。?
也可以在調(diào)用__init__()方法時(shí)傳遞參數(shù),動(dòng)態(tài)設(shè)置實(shí)例對(duì)象的屬性勘伺。
例:調(diào)用__init()方法時(shí)傳遞參數(shù)
__init__()方法屯阀,在創(chuàng)建一個(gè)對(duì)象時(shí)默認(rèn)被調(diào)用难衰,不需要手動(dòng)調(diào)用
__init__(self)中失暂,默認(rèn)有1個(gè)參數(shù)名字為self,如果在創(chuàng)建對(duì)象時(shí)傳遞了2個(gè)實(shí)參宣肚,那么__init__(self)中出了self作為第一個(gè)形參外還需要2個(gè)形參,例如__init__(self,x,y)
__init__(self)中的self參數(shù)笙瑟,不需要開(kāi)發(fā)者傳遞,python解釋器會(huì)自動(dòng)把當(dāng)前的對(duì)象引用傳遞進(jìn)去
可以把self當(dāng)做C++中類里面的this指針一樣理解错洁,就是對(duì)象自身的意思
某個(gè)對(duì)象調(diào)用其方法時(shí)描睦,python解釋器會(huì)把這個(gè)對(duì)象作為第一個(gè)參數(shù)傳遞給self,所以開(kāi)發(fā)者只需要傳遞后面的參數(shù)即可
4韵丑、保護(hù)對(duì)象的屬性
如果有一個(gè)對(duì)象,當(dāng)需要對(duì)其進(jìn)行修改屬性時(shí),有2種方法
對(duì)象名.屬性名 = 數(shù)據(jù) ---->直接修改
對(duì)象名.方法名() ---->間接修改
為了更好的保存屬性安全,即不能隨意修改摆霉,一般的處理方式為
將屬性定義為私有屬性
添加一個(gè)可以調(diào)用的方法,供調(diào)用
例:調(diào)用私有屬性
以__屬性開(kāi)頭的屬性為私有屬性向挖,不能通過(guò)實(shí)例對(duì)象直接調(diào)用跟畅,不支持修改和取值奸攻。要想取值和修改部翘,必須調(diào)用實(shí)例對(duì)象的方法晃酒。
Python中沒(méi)有像C++中public和private這些關(guān)鍵字來(lái)區(qū)別公有屬性和私有屬性崔兴。
它是以屬性命名方式來(lái)區(qū)分,如果在屬性名前面加了2個(gè)下劃線'__'蛔翅,則表明該屬性是私有屬性敲茄,否則為公有屬性(方法也是一樣,方法名前面加了2個(gè)下劃線的話表示該方法是私有的山析,否則為公有的)