python類的繼承
阿新 • • 發佈:2021-01-30
python 類的繼承
一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法;原有的類稱為父類,新類稱為字類。字類繼承了其父類的所有的屬性和方法,同時還可以定義自己的屬性和方法。
下面來模擬電動汽車。我們建立Car父類,在加上電動汽車的新類ElectricCar。在我們不斷給ElectricCar類新增細節時,我們會建立很多針對電動汽車的一些屬性和方法,導致類越來越大,我們需要將類的一部分作為一個獨立的類提取出來,拆分成多個協同工作的小類。
此時,我們將電動汽車關於汽車電瓶的屬性和方法提取出來,作為新類Battery。
詳細程式碼及解釋如下:
class Car(object): # 父類必須包含在當前檔案中,且位於子類前面
"""一次模擬汽車的簡單嘗試"""
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 = 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 Battery(object):
"""一次模擬電動汽車電瓶的簡單嘗試"""
def __init__(self, battery_size=70):
"""初始化電瓶的屬性"""
self.battery_size = battery_size
def describe_battery(self):
"""列印一條描述電瓶容量的訊息"""
print("This car has a "+str(self.battery_size)+"-kWh battery.")
def get_range(self):
"""列印一條訊息,指出電瓶的續航里程"""
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
class ElectricCar(Car): # 定義子類時必須在括號內指定父類名稱
"""電動汽車的獨特之處"""
def __init__(self, make, model, year):
"""初始化父類的屬性"""
super().__init__(make, model, year) # super幫助python將父類和字類關聯起來
self.battery = Battery()
# 新增名為self.battery的屬性,建立一個新的Battery例項,並將該例項儲存在屬性self.battery中
# 當方法__init__()被呼叫時,都執行該操作
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery() # 通過battery屬性呼叫前面定義的方法
my_tesla.battery.get_range()