零基礎快樂學Python(16)——子承父類

今天我們主要來介紹“繼承”,這是類的一個很重要的功能。

什麼是繼承呢?就是說當你定義了一個類後,如果我希望有一個新的類,可以擁有之前類的所有屬性和方法,同時也能建立自己的屬性和方法。

此時,這個新的類就叫做子類,之前的類就叫做父類,將父類的屬性和方法“複製”到子類中的這個動作就叫做

繼承

。也就是說,子類既有和父類的“共性”,又有自己的“個性”。

1

多說無益,我們先來看一個例子:

class Bike: def __init__(self,model,year): self。model = model self。year = year self。distance = 0 def dis(self): print(f‘The {self。model} has {self。distance} km on it。’) def update_dis(self,km): if km >= self。distance: self。distance = km else: print(“Wrong behavior!”)class Mountain_bike(Bike): def __init__(self,model,year): super()。__init__(model,year)

在這段程式碼中,我們先定義了一個父類

Bike

,然後又定義了一個子類

Mountain_bike

,希望能繼承父類。因此,在子類後要加一個括號,裡面寫上父類的名字。這裡我們的父類是腳踏車,而子類是山地車,山地車是腳踏車的一種。

之後,定義呼叫子類時自動執行的方法

__init__

,因為我們想繼承父類,所以

super

()就表示繼承的含義,它表示呼叫父類的方法。super是superclass(超類)的簡寫,因此父類又被稱為超類。

我們希望繼承父類的屬性,因此後面要跟__init_

_

方法,但裡面的引數就不用寫self了,這裡只表示繼承關係。

將子類例項化後,它就可以呼叫父類的屬性和方法了,比如:

new_bike = Mountain_bike(‘XC’,2021)new_bike。dis()

輸出結果為:

The XC has 0 km on it。

2

當然,子類也可以擁有自己的屬性和方法,讓我們給之前的

Mountain_bike

新增一些吧:

class Mountain_bike(Bike): def __init__(self,model,year): super()。__init__(model,year) self。transmission = 27 def speed_changer(self): print(f“The {self。model} has {self。transmission} shifting。”)

注意第4行程式碼,我們給子類添加了一個transmission的屬性,它表示山地車的速別,這裡預設是27速。

然後又添加了一個

speed_changer

的方法,列印當前型號山地車的速別。

我們將其例項化,呼叫子類的新方法看下:

new_bike = Mountain_bike(‘XC’,2021)new_bike。speed_changer()The XC has 27 shifting。

3

有時候父類的方法可能過時了,不再適合所有子類,這時你可以在子類中重寫父類的方法。

具體的操作是,在子類中定義一個和父類方法完全相同的名字,然後寫入新的內容:

class Mountain_bike(Bike): def __init__(self,model,year): super()。__init__(model,year) self。transmission = 27 def speed_changer(self): print(f“The {self。model} has {self。transmission} shifting。”) def update_dis(self): #和父類方法同名 print(‘You can not do this!’)

注意第7行,當你定義了一個和父類完全相同的方法時,在子類例項化之後,如果呼叫該方法,那麼將使用子類中的定義,而覆蓋掉原先父類中的定義。我們將其例項化,看下結果:

new_bike = Mountain_bike(‘XC’,2021)new_bike。update_dis()You can not do this!

4

有時候你會發現有些子類的方法是類似,你可以把它們提取出來,作為一個新的類。同時,新類的例項也可以作為屬性應用到原來的類中。

比如山地車都有速別這個屬性,那麼我可以將其單獨建立一個類:

class Transmission: def __init__(self,transmission = 27): self。transmission = transmission def speed_changer(self): print(f“The bike has {self。transmission} shifting。”)

我可以在山地車這個類中,將

Transmission

例項化,作為其屬性:

class Mountain_bike(Bike): def __init__(self,model,year): super()。__init__(model,year) self。trans = Transmission() #例項用作屬性

注意第4行程式碼,新類被例項化,賦給了屬性trans,這意味著該屬性可以呼叫

Transmission

類中的所有屬性和方法。比如下面這樣:

new_bike = Mountain_bike(‘XC’,2021)new_bike。trans。speed_changer()

看下結果:

The bike has 27 shifting。

關於類的內容,終於介紹完了,你都get到了嗎?