Python進(jìn)階語法之類的繼承
在編寫類時(shí),我們并非每次都需要從空白開始。
如果我們要編寫的類是我們曾經(jīng)編寫過的類(現(xiàn)成的)的特殊版本,可使用繼承。
一個(gè)類繼承另一個(gè)類時(shí),將自動(dòng)獲得另一個(gè)類的所有屬性和方法。原有的類稱為父類,而新類稱為子類。子類繼承了父類的所有屬性和方法,同時(shí)還可以定義自己的屬性和方法。
一、子類的方法__init__( )
在既有類的基礎(chǔ)上編寫新類時(shí),通常要調(diào)用父類的方法__init__( )。這將初始化在父類__init__( )方法中定義的所有屬性,從而讓子類包含這些屬性。
例如,下面來模擬電動(dòng)汽車。電動(dòng)汽車是一種特殊的汽車,因此可在前面創(chuàng)建的Car類的基礎(chǔ)上創(chuàng)建新類ElelctricCar。這樣就只需為電動(dòng)汽車特有的屬性和行為編寫代碼。
創(chuàng)建一個(gè)Car類
class Car:
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
"""初始化汽車的屬性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整潔的描述性信息"""
long_name = f'{self.year}{self.make}{self.model}'
return long_name.title()
def read_odometer(self):
"""打印一條指出汽車?yán)锍痰南?""
print(f"This car has {self.odometer_reading} miles on it")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print('你怎么能調(diào)表呢??。??!')
def increment_odoment(self,miles):
"""將里程表讀數(shù)增加到指定數(shù)量"""
self.odometer_reading+=miles
創(chuàng)建子類ElelctricCar
下面我們來創(chuàng)建ElelctricCar類的一個(gè)簡單版本,它具備Car類的所有功能:
class Car
pass
class ElectricCar(Car):
"""電動(dòng)汽車的獨(dú)特之處"""
def __init__(self,make,model,year):
"""初始化父類的屬性"""
super().__init__(make, model, year)
my_tesla=ElectricCar(' tesla', ' models', 2021)
print(my_tesla.get_descriptive_name())
首先是Car類的代碼。創(chuàng)建子類時(shí),父類必須包含在當(dāng)前文件中,且位于子類的前面。定義子類ElectricCar。定義子類時(shí),必須在圓括號內(nèi)指定父類的名稱。方法__init__( )接受創(chuàng)建Car實(shí)例所有需要的信息。
super()是一個(gè)特殊函數(shù),讓你能夠調(diào)用父類的方法。這行代碼能讓Pyhton調(diào)用Car類的方法__init__( ),讓ElectricCar實(shí)例包含這個(gè)方法中定義的所有屬性。父類也稱為超類(superclass),名稱super由此而來。
二、給子類定義屬性和方法
讓一個(gè)類繼承另一個(gè)類后,就可以添加區(qū)分子類和父類所需的新屬性和新方法了。
下面來添加一個(gè)電動(dòng)汽車特有的屬性(電瓶),以及一個(gè)描述該屬性的方法。我們將存儲電瓶容量,并編寫一個(gè)打印電瓶描述的方法:
class Car:
pass
def __init__(self,make,model,year):
"""初始化父類的屬性。
再初始化電動(dòng)汽車特有的屬性"""
super().__init__(make, model, year)
self.battery_size = 75
def descibe_battery(self):
"""打印一條描述電瓶容量的消息"""
print(f"這個(gè)車有{self.battery_size}千瓦時(shí)的電池")
my_tesla=ElectricCar(' tesla', ' models', 2021)
print(my_tesla.get_descriptive_name())
my_tesla.descibe_battery()
在這里給Car類添加的子類ElectricCar類中,又定義了一個(gè)battery_size屬性,,并且添加了一個(gè)describer_battery( )方法 ,打印有關(guān)電瓶的信息。調(diào)用這個(gè)方法時(shí),將會看到一特有的描述:
2021 Tesla Models
這個(gè)車有75千瓦時(shí)的電池
三、重寫父類的方法
對于父類的方法,我們有可能發(fā)現(xiàn)父類的方法不符合子類模擬的實(shí)物的行為,這時(shí)我們便可以改寫它。為此,我們可以在子類中定義一個(gè)與要重寫的父類方法同名的方法。這樣Python將不會考慮這個(gè)父類的方法。
比如:
class ElectricCar(Car):
pass
def fill_gas_tank(self):
"""電動(dòng)汽車沒有油箱"""
print("這個(gè)車沒有油箱!")
將此定義在子類也寫一遍之后,即可覆蓋父類中的方法。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python paramiko模塊學(xué)習(xí)分享
這篇文章主要為大家分享了python paramiko模塊的學(xué)習(xí)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
python連接mongodb操作數(shù)據(jù)示例(mongodb數(shù)據(jù)庫配置類)
這篇文章主要介紹了python連接mongodb操作數(shù)據(jù)示例,主要包括插入數(shù)據(jù)、更新數(shù)據(jù)、查詢數(shù)據(jù)、刪除數(shù)據(jù)等2013-12-12
python 高效去重復(fù) 支持GB級別大文件的示例代碼
今天小編就為大家分享一篇python 高效去重復(fù) 支持GB級別大文件的示例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
Python 實(shí)現(xiàn)引用其他.py文件中的類和類的方法
下面小編就為大家分享一篇Python 實(shí)現(xiàn)引用其他.py文件中的類和類的方法,具有的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
python數(shù)字圖像處理數(shù)據(jù)類型及顏色空間轉(zhuǎn)換
這篇文章主要為大家介紹了python數(shù)字圖像處理數(shù)據(jù)類型及顏色空間轉(zhuǎn)換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06

