久等了各位。繼續把剩下的繼續做完!前面文章的測試代碼由于頭條的代碼塊有問題。出現了縮進問題。如果大家測試得改一下縮進。就測試正常
喜歡python就關注冠山巡山使。 我將跟大家一塊自學完python語言。
9.3.4 重寫父類的方法
9.3.4 重寫父類的方法
對于父類的方法,只要它不符合子類模擬的實物的行爲,都可對其進行重寫。爲此,可在子類中定義一個這樣的方法,即它與要重寫的父類方法同名。這樣, Python將不會考慮這個父類方法,而只關注你在子類中定義的相應方法。
假設Car類有一個名爲fill_gas_tank()的方法,它對全電動汽車來說毫無意義,因此你可能想重寫它。下面演示了一種重寫方式:
代碼1(測試正常)
class Car():
#Car類的代碼
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
"""
電動汽車的獨特之處
初始化父類的屬性,再初始化電動汽車特有的屬性
"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
self.battery_size = 70 #添加一個電瓶屬性
def fill_gas_tank(self):
"""這輛汽車有郵箱"""
print("這個汽車有郵箱啊")
def describe_battery(self):
"""打印一條描述電瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
#定義了子類ElectricCar,定義子類時必須在括號內指定父類的名稱
"""電動汽車的獨特之處"""
def __init__(self, make, model, year):
#方法__init__()接受創建Car實例所需的信息
"""初始化父類的屬性"""
super(ElectricCar, self).__init__(make, model, year)
#函數super()需要兩個實參:子類名和對象self。爲幫助Python將父類和子類關聯起來,這些實參必不可少。
my_tesla = ElectricCar('tesla', 'model s', 2016)
#創建ElectricCar類的一個實例,並將其存儲在變量my_tesla中
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
這是父類的方法
輸出這裏的汽車有郵箱
這裏在子類寫上同名方法
代碼2(測試正常)
class Car():
#Car類的代碼
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
"""
電動汽車的獨特之處
初始化父類的屬性,再初始化電動汽車特有的屬性
"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
self.battery_size = 70 #添加一個電瓶屬性
def fill_gas_tank(self):
"""這輛汽車有郵箱"""
print("這個汽車有郵箱啊")
def describe_battery(self):
"""打印一條描述電瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car):
#定義了子類ElectricCar,定義子類時必須在括號內指定父類的名稱
"""電動汽車的獨特之處"""
def __init__(self, make, model, year):
#方法__init__()接受創建Car實例所需的信息
"""初始化父類的屬性"""
super(ElectricCar, self).__init__(make, model, year)
#函數super()需要兩個實參:子類名和對象self。爲幫助Python將父類和子類關聯起來,這些實參必不可少。
def fill_gas_tank(self):
"""電動車沒有郵箱"""
print("這個電動汽車不需要郵箱")
my_tesla = ElectricCar('tesla', 'model s', 2016)
#創建ElectricCar類的一個實例,並將其存儲在變量my_tesla中
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
my_tesla.fill_gas_tank()
子類同名方法
再輸出
現在,如果有人對電動汽車調用方法 fill_gas_tank(), Python將忽略 Car類中的方法
fill_gas_tank(),轉而運行上述代碼。使用繼承時,可讓子類保留從父類那裏繼承而來的精華,
並剔除不需要的糟粕。
因爲後面代碼篇幅比較大。大家看起來也不便。所以自學教程我會分割的比較多些。
今天學到這裏。明天繼續 類 的學習
如果喜歡可以 點贊+關注冠山巡山使 or 評論+轉發此文章讓其他喜歡Python的同學看到吆 。明天見!
關注冠山巡山使+私信:“編輯器”三個字 就可以有這個編輯器的下載地址了。 關注冠山巡山使+私信:“自學python”可以下載此教程!(我是參考此教程做的自學課程。大多數人兒只是下載下來。看完的很少。希望能跟我一塊自學完!)