第四章 第二節 類

2022-03-05 10:14:59 字數 4663 閱讀 6853

類是物件導向開發中必須用到的,類就是表示現實世界中的事物和情景。

零、建立類

我們使用類前,應該建立類,建立類的方式很簡單,語法如下:

class 類名稱():

類的內容

通過例子看一下,我們定義乙個cat類,類中定義乙個列印名字的方法。

# 定義乙個cat類

class

cat():

def__init__

(self,name)

:"""初始化name"""

self.name=name

defcatname

(self)

:"""列印出cat的姓名"""

print

("我的貓的名字叫%s"

% self.name)

在上面的**中方法init是乙個特殊的方法,在建立類的例項的時候,例項會自動呼叫這個方法,一般用來對例項的屬性進行初使化。另類裡面的兩個方法都有self,代表物件本身。在類中我們也看到了以self.開頭的變數(self.name),只要是在類中見到這種形式的變數,就說明該變數可以在類中的所有方法中使用,同時也可以通過類的任何例項進行使用。

一、例項化類

例項化名稱=類名稱([引數])
我們把剛才建立的類例項化,然後再呼叫其中的方法:

# 例項化cat類,傳入cate的名字

cat=cat(

"小白"

)#呼叫方法

cat.catname(

)

二、繼承

當我們定義乙個類的時候,可以從某個現有的類繼承,新的類稱為子類,而被繼承的類稱為基類、父類或超類。語法如下:

class 子類名稱(父類名稱)

: 類的內容

子類繼承了父類的所有操作,同時子類也可以有自己的方法或者重寫父類的方法。我們把前面建立的cat類作為父類,編寫乙個新的cat類:

class

chinacat

(cat)

:def

__init__

(self,name,age)

:"""增加乙個age"""

self.name=name

self.age=age

super()

.__init__(name)

defgetage

(self)

:print

("我的貓的年齡是 %s"

% self.age)

在這個新類裡我們向init方法增加了age引數,並且增加了getage方法,這些方法在cat類中是沒有的。在我們例項化chinacat類後,即可以呼叫自己本身的方法,也可以呼叫父類的方法。我們接下來看一下例子:

chinacat=chinacat(

"小花",1

)# 呼叫自己本身的方法

chinacat.getage(

)# 呼叫父類方法

chinacat.catname(

)

接下來我們再看乙個例子,我們定義乙個car類,類中定義兩個方法:startupshutdowncarcolor,之後再定義乙個子類electriccar,子類重寫父類的carcolor方法,並定義乙個自己的方法batterypower,最後我們再呼叫這兩個類的方法。

# 定義car類

class

car():

def__init__

(self,color)

: self.color=color

defstartup

(self)

:print

('啟動引擎'

)def

shutdown

(self)

:print

('關閉引擎'

)def

carcolor

(self)

: color=self.color

print

('汽車的顏色是 %s'

% color)

# 定義子類electriccar

class

electriccar

(car)

:def

__init__

(self,color)

: self.color=color

super()

.__init__(color)

defcarcolor

(self,color=

none):

if color:

self.color=color

print

('電動汽車的顏色是 %s'

% self.color)

defbatterypower

(self,battery)

:print

('電動汽車電量還有 %d%%'

% battery)

# 呼叫car類

car=car(

'藍色'

)# 啟動汽車

car.startup(

)# 輸出汽車的顏色

car.carcolor(

)# 關閉汽車

car.shutdown(

)# 呼叫electriccar類

e_car=electriccar(

'紅色'

)# 啟動汽車

e_car.startup(

)# 輸出汽車顏色

e_car.carcolor(

)# 輸出汽車電量,每次減去10%的電量

battery=

100e_car.batterypower(battery)

for i in

range

(100,-

10,-10

):battery=i

e_car.batterypower(battery)

if i==0:

print

('電量用完了!'

)# 關閉引擎

e_car.shutdown(

)# 定義乙個新的電動汽車例項

new_e_car=electriccar(

'白色'

)new_e_car.carcolor(

'黑色'

)

我們看到electriccar類重寫了父類的carcolor方法,增加了顏色的設定,並將形參預設值設為none,方法體中的**通過判斷color是否為none來決定是否使用例項化類的時候傳入的顏色。

在某些情況我們不希望子類呼叫父類的某些方法,這時我們就可以定義以__開頭的方法,這樣的方法被稱為私有方法,父類的私有方法在子類的例項中是無法呼叫。我們看一下例子:

class

classa()

:def

__init__

(self)

:pass

def__myclassa

(self)

:print

('class a'

)class

classb

(classa)

:def

__init__

(self)

:super()

.__init__(

)def

myclassb

(self)

:print

('class b'

)# 例項化classb

b=classb(

)# 呼叫classb的方法

b.myclassb(

)# 呼叫classad的方法,將會報錯

b.__myclassa(

)

三、匯入

和函式類似,我們也可以將類儲存進py檔案中,我們習慣上會將類及其子類放在同乙個py檔案中。當在另乙個檔案中需要使用某乙個類時,只需要匯入這個類即可,匯入的語法和函式一樣。

四、小結

本節我們講的比較多,這節是本教程的重中之重,無比記牢類的用法。本節課的內容我將會在這個系列的教程講完後,在《物件導向程式設計》中進一步講解。

五、作業

定義乙個動物類,類中包含三個方法,分別執行:發出叫聲、輸出動物腿的數量和動物尾巴數量;

例項化上面定義的類;

將1中的類作為父類,擴充套件出幾個動物的子類,並重寫父類中的乙個或幾個方法,根據每種動物的特點擴充套件出各自獨有的方法;

將父類的某個方法設為私有。

第四章 第二節 類

類是物件導向開發中必須用到的,類就是表示現實世界中的事物和情景。零 建立類 我們使用類前,應該建立類,建立類的方式很簡單,語法如下 class 類名稱 類的內容通過例子看一下,我們定義乙個cat類,類中定義乙個列印名字的方法。定義乙個cat類 class cat def init self,name...

python小白之路 第四章資料型別第二節列表

重點記憶 返回列表元素個數。varl 1 2,3 print len varl 3返回列表元素中的最大值。varl 1 2,3 print max varl 3返回列表元素中的最小值。varl 1 2,3 print min varl 1重點記憶 用於將元組或字串轉換為列表。str 123 vart...

第四章 4 9節練習

練習4.28 寫一段程式,輸出每一種內建型別所佔空間的大小。解答 這裡可以用sizeof來輸出你想得到的型別的大小。練習4.29 推斷下面 的輸出結果並說明理由。實際執行這段程式,結果和你想象的一樣嗎?如果不一樣,為什麼?int x 10 int p x cout sizeof x sizeof x...