1. 程式人生 > 其它 >python類的繼承

python類的繼承

技術標籤:python基礎python

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()