1.面向?qū)ο笏枷?/strong>
在認(rèn)識(shí)類(lèi)之前,我們需要理解面向?qū)ο笏枷牒兔嫦蜻^(guò)程思想。
面向過(guò)程思想:要擁有一間房屋,面向過(guò)程像是自己來(lái)修蓋房屋,如果需要經(jīng)過(guò)選址、購(gòu)買(mǎi)材料、砌墻、裝修等步驟,面向過(guò)程編程,就相當(dāng)于自己個(gè)人來(lái)負(fù)責(zé)這些事情,需要考慮屋子選在什么地方修建,要哪些材料,怎么砌墻,怎么裝修等。每一步都需要自己來(lái)考慮,然后按照步驟一步一步實(shí)施。
面向?qū)ο笏枷耄和瑯訐碛幸婚g房屋,但是面向?qū)ο蟾犀F(xiàn)實(shí),類(lèi)似于專(zhuān)業(yè)的人做專(zhuān)業(yè)的思想,選址、購(gòu)買(mǎi)材料、砌墻等步驟由開(kāi)發(fā)商這個(gè)對(duì)象來(lái)完成,作為我們個(gè)人自己不需要去考慮這些步驟具體如何實(shí)施,對(duì)于裝修我們可以交給裝修公司這個(gè)對(duì)象來(lái)完成,我們個(gè)人自己也不需要去考慮具體步驟如何實(shí)施,我們個(gè)人要做的只是去選擇其中某個(gè)開(kāi)發(fā)商修建的某套房屋即可,某個(gè)裝修公司的某個(gè)裝修方案即可。放在Python編程中,相當(dāng)于開(kāi)發(fā)商具有提供毛坯房的函數(shù),裝修公司有裝修方案的函數(shù),我們需要屋子的時(shí)候,直接可以去調(diào)用開(kāi)發(fā)商的毛坯房函數(shù)、需要裝修就去調(diào)用裝修公司的裝修方案函數(shù)。
所以面向?qū)ο笏枷氲木幊谭绞?,更符合現(xiàn)實(shí)世界鐘的事物和情景,面向過(guò)程的思想略顯復(fù)雜,需要考慮過(guò)程中的每一步
2.創(chuàng)建類(lèi)
在面向?qū)ο缶幊讨?,編?xiě)表示現(xiàn)實(shí)世界中的事物和情景,我們需要用到類(lèi),由類(lèi)創(chuàng)建對(duì)象。類(lèi)的話(huà)類(lèi)似于上面例子中的開(kāi)發(fā)商的共性信息集合,對(duì)象的話(huà)類(lèi)似于就是具體到某個(gè)開(kāi)發(fā)商的具體信息集合。使用面向?qū)ο缶幊炭筛颖普娴哪M現(xiàn)實(shí)情景。
使用類(lèi)幾乎可以模擬任何東西。下面我們就編寫(xiě)一個(gè)表示人的簡(jiǎn)單類(lèi),類(lèi)的話(huà)表示的不是特定的人,而是任何一個(gè)人,里面編寫(xiě)的都是人的共性信息集合。
其語(yǔ)法格式:
我們新建一個(gè)people的.py文件,并編寫(xiě)程序如下所示:
通過(guò)上面的程序編寫(xiě)我們發(fā)現(xiàn)有以下幾點(diǎn):
1.有四個(gè)def關(guān)鍵字代表的函數(shù),在類(lèi)中的函數(shù)我們稱(chēng)為類(lèi)的方法,前面學(xué)到的有關(guān)函數(shù)的一切都適用于方法,我們定義了初始化方法__init__、吃飯方法eat、睡覺(jué)方法sleep、學(xué)習(xí)方法study,雖然只是輸出了一條語(yǔ)句,但是我們可以根據(jù)需求,繼續(xù)擴(kuò)展,這里只是舉下例子。
2.init方法,是類(lèi)的初始化方法,這個(gè)一個(gè)特殊的方法,每當(dāng)根據(jù)人的類(lèi)去創(chuàng)建人的實(shí)例時(shí),Python都會(huì)自動(dòng)運(yùn)行它。在這個(gè)方法的名稱(chēng)中,開(kāi)頭和末尾各有兩個(gè)下劃線(xiàn),這是一種約定,旨在避免Python默認(rèn)方法與普通方法發(fā)生名稱(chēng)沖突。
3.__init__方法聲明時(shí)有兩個(gè)形參變量,self和name。其中self是必不可少的,還必須位于其他形參變量的前面。因?yàn)镻ython調(diào)用__init__方法來(lái)創(chuàng)建人的類(lèi)所對(duì)應(yīng)的人的實(shí)例時(shí),將自動(dòng)傳入實(shí)參self。所以我們?cè)谙騊eople這個(gè)類(lèi)的實(shí)例對(duì)象傳遞實(shí)參變量數(shù)據(jù)時(shí),只需傳遞name,self會(huì)自動(dòng)傳遞,我們不需要手動(dòng)傳遞它
4.每個(gè)與類(lèi)相關(guān)聯(lián)的方法調(diào)用都自動(dòng)傳遞實(shí)參變量self,它是指向?qū)嵗旧淼囊茫寣?shí)例能夠訪(fǎng)問(wèn)類(lèi)中的屬性和方法,屬性在這里就相當(dāng)于name。
5.self.name = name這條語(yǔ)句,以self為前綴的變量都可供類(lèi)中的所有方法使用,我們還可以通過(guò)類(lèi)的任何實(shí)例來(lái)訪(fǎng)問(wèn)這些變量。這些變量叫做類(lèi)的屬性
3.創(chuàng)建實(shí)例
實(shí)例是類(lèi)的對(duì)象,可將類(lèi)視為有關(guān)如何創(chuàng)建實(shí)例的說(shuō)明。People類(lèi)是實(shí)例人的一系列說(shuō)明,讓Python知道如何創(chuàng)建表示特定人的實(shí)例。
其語(yǔ)法格式:
變量名 = 類(lèi)名(實(shí)參變量1,實(shí)參變量2,,,,,實(shí)參變量n)
編寫(xiě)程序如下所示:
我們看到輸出結(jié)果是一個(gè)People object說(shuō)明這是一個(gè)People的對(duì)象
如果想輸出people這個(gè)示例的屬性信息,可以在People類(lèi)編寫(xiě)一個(gè)__str__方法,我們?cè)诶胮rint函數(shù)對(duì)people輸出時(shí),people會(huì)自動(dòng)調(diào)用__str__方法,無(wú)需我們顯式調(diào)用,這個(gè)其實(shí)是重寫(xiě)父類(lèi)的方法,后期會(huì)有所介紹。
編寫(xiě)程序如下所示:
這里需要注意的是方法__init__方法并未顯式地包含return語(yǔ)句,但Python自動(dòng)返回一個(gè)表示人的實(shí)例,我們將這個(gè)實(shí)例存儲(chǔ)在變量people中。
4.訪(fǎng)問(wèn)類(lèi)屬性
要訪(fǎng)問(wèn)實(shí)例的屬性,可使用句點(diǎn)表示法。
其語(yǔ)法格式:
實(shí)例變量名.類(lèi)屬性名
編寫(xiě)程序如下所示:
句點(diǎn)表示法在Python中很常用,這種語(yǔ)法演示了Python如何獲悉屬性的值。在這里Python先找到實(shí)例people,再查找與這個(gè)實(shí)例相關(guān)聯(lián)的屬性name,因?yàn)榧觭elf前綴的變量,就是與實(shí)例相關(guān)聯(lián)的變量,這里找的就是self.name,因?yàn)榇藭r(shí)self.name的值為'張三',所以輸出結(jié)果即為'張三'
5.調(diào)用類(lèi)方法
句點(diǎn)表示法不僅可以用來(lái)訪(fǎng)問(wèn)類(lèi)屬性,也可用來(lái)訪(fǎng)問(wèn)類(lèi)方法。
其語(yǔ)法格式:
實(shí)例變量名.類(lèi)方法
編寫(xiě)程序如下所示:
6.創(chuàng)建多個(gè)實(shí)例
我們創(chuàng)建多個(gè)人的實(shí)例,輸出他們的名字并且輸出他們正在干什么
編寫(xiě)程序如下所示:
每個(gè)人都是獨(dú)立的一個(gè)實(shí)例,有自己的一組屬性,能夠執(zhí)行相同的操作。我們可以根據(jù)一個(gè)類(lèi)創(chuàng)建任意數(shù)量的實(shí)例。