【懶懶的Python學習筆記八】

面向對象編程是最有效的編程方法之一,在面向對象編程中,你編寫表示現實世界中事物和情景的類,並基於這些類來創建對象。使用類來創建對象被稱爲實例化

創建和使用類

使用類可以模擬任何東西。下面的實例編寫一個表示小狗的的簡單類Dog——它表示的佈設某個特定的小狗,而是任何小狗,編寫這個類後,我們將使用它來創建表示任何特定的小狗的實例。

創建類

根據Dog類創建的每個實例都將存儲名字和年齡,我們賦予每條小狗蹲下(sit())和打滾(roll_over())的能力。


這裏有很多地方需要注意,首先使用Class關鍵字定義類,在Python中首字母大寫的名稱一般是類,其次在類名Dog()的括號中包括Object,實際上在新版的Python 3中括號內不需要添加任何內容。

1、方法__init()__

類中的函數稱爲方法。前面所學的任何關於函數的一切都適用於方法,但是在調用方法上有所不同。__init()__方法是一個特殊的方法,每當你使用類創建一個實例的時候Python都會自動運行它。這個方法名稱中,開頭和末尾各有兩個下劃線,這是一種約束,旨在避免Python默認方法與普通方法產生衝突

方法__init()__定義包含三個參數:self、name和age。在這個方法的定義中,形參self是必不可少的,並且必須在其他形參前面。當我們Python調用__init()__來創建實例的時候會自動傳入self這個參數,self參數是一個指向實例本身的引用,爲的是讓實例訪問類中的屬性和方法。需要注意的是我們在使用類創建實例的時候不需要傳遞self參數,在上個實例中只需要後兩個形參(name和age)。

__init()__方法函數體內定義的變量都有self前綴,以self爲前綴的變量可以供類的所有方法使用。語句self.name=name是將形參中name的值存儲到類的變量name中。像這種可以通過實例訪問的變量稱爲屬性。

實際上在類中定義的函數都帶有self這個形參。

2、創建實例

下面我們創建一個小狗的實例:




要訪問實例的屬性,可使用句點表示法。句點表示法在Python中很常見。在這裏Python先找到實例my_dog(),再查找與這個實例相關聯的屬性name。那麼對類中的方法也可以用句點表示法來調用。



要調用方法的時候,可依次指定實例和要調用的方法。

類和實例的使用

1、創建一個Car類

下面簡單編寫一表示汽車的類,它存儲了有關汽車的信息。





2、給屬性指定默認值

類的每個屬性都必須有初始值。在某些情況下可以給屬性設定一個默認值,這樣在實例化的時候就不必爲其提供初始值的形參。





我們在__init()__方法中,創建一個read_odometer的屬性,並將其初始值設置爲0,這樣我們在實例化對象的時候就不必爲其增加實參了。

3、修改屬性值

修改屬性值的方法大致有兩種,一種是通過實例直接修改;另一種是通過方法修改。




我們可以直接使用句點表示法直接訪問並設置汽車的屬性odometer_reading()並將其設置爲100。

通過方法修改





繼承

在編寫類時,並非總是要從空白開始,一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法:原有的類稱爲父類;而新類稱爲子類。子類繼承父類的所有方法和屬性,並且還可以有自己的屬性和方法。

1、子類的__init()__方法

創建子類的實例的時候,Python首先完成的任務是給父類所有的屬性賦值,這時候子類的方法__init()__需要父類施以援手。





創建子類的時候,父類必須包含在當前文件中且位於子類之前,定義子類的時候括號內必須指定父類名字。子類的__init()__方法內的super()函數是一個特殊的函數,幫助Python將子類與父類連接起來,這行代碼讓Python調用父類的__init()__方法,函數super()接受兩個實參,分別是子類名稱和對象self。在Python 3版本中super()函數則不需要參數。

2、給子類定義屬性和方法

子類除了包含父類的屬性和方法之外,通常還有自己特有的方法和屬性,我們修改以上代碼





要給子類定義屬性,首先要初始化父類的屬性,在初始化子類的特有屬性

3、重寫父類的方法

有時候父類的一些方法並不符合子類的需求,這時候需要在子類中對父類的方法進行重寫,爲此可以在子類中定義一個與父類需要重寫的方法同名的方法,這樣Python不會考慮父類中的方法而只會關注你在子類中定義的相應的方法。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章