Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

2020 年 1 月 13 日 冠山巡山使

久等了各位。繼續把剩下的繼續做完!前面文章的測試代碼由于頭條的代碼塊有問題。出現了縮進問題。如果大家測試得改一下縮進。就測試正常

喜歡python就關注冠山巡山使。 我將跟大家一塊自學完python語言。

跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

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()
跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

這是父類的方法

跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

輸出這裏的汽車有郵箱

這裏在子類寫上同名方法

代碼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()
跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

子類同名方法

跟我一起自學python語言 第9章 類(9.3.4 重寫父類的方法)

再輸出

現在,如果有人對電動汽車調用方法 fill_gas_tank(), Python將忽略 Car類中的方法
fill_gas_tank(),轉而運行上述代碼。使用繼承時,可讓子類保留從父類那裏繼承而來的精華,
並剔除不需要的糟粕。

因爲後面代碼篇幅比較大。大家看起來也不便。所以自學教程我會分割的比較多些。

今天學到這裏。明天繼續 類 的學習

如果喜歡可以 點贊+關注冠山巡山使 or 評論+轉發此文章讓其他喜歡Python的同學看到吆 。明天見!

關注冠山巡山使+私信:“編輯器”三個字 就可以有這個編輯器的下載地址了。
關注冠山巡山使+私信:“自學python”可以下載此教程!(我是參考此教程做的自學課程。大多數人兒只是下載下來。看完的很少。希望能跟我一塊自學完!)

相關文章:

  • 架構師心得:實戰電子版書籍JVM+多線程+Kafka+Redis+Nginx+MySQL
  • 納吉家裏究竟有多少財物?567個名牌包,432塊手表,1.2萬件珠寶......
  • 定了!新加坡下周進一步解封!出賣移民權讓印度人湧入?總理部長怒回應~
  • 全球機床産值及我國機床行業發展趨勢面臨的機遇挑戰重點企業
  • 報告|我國基礎設施REITs取費結構與機制的分析
科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們