類的繼承
阿新 • • 發佈:2020-07-21
super()類是一個特殊的函式,這個函式是把父類和子類關聯起來,super(ElectricCar, self).__init__(make,model,year)是呼叫父類的__init__方法,讓子類的例項包含父類的所有方法,因為父類也稱為超類,這就是super()的由來,
#父類 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odomete_reading= 0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model return long_name def read_odometer(self): print("the car has " + str(self.odomete_reading) + " mlies!") def update_odometer(self,mlies): #修改引數odomete_reading的值 self.odomete_reading = mliesdef increment_odometer(self,mlies): #通過內部的方法來使的內部資料增加 self.odomete_reading += mlies #子類 class ElectricCar(Car): #子類繼承父類的書寫方法 def __init__(self,make,model,year): super(ElectricCar, self).__init__(make,model,year) my_electricCar = ElectricCar('tesla','Q3',920) long_name = my_electricCar.get_descriptive_name()print(long_name) #920 tesla Q3 my_electricCar.update_odometer(100101) my_electricCar.read_odometer() #the car has 100101 mlies! my_electricCar.increment_odometer(2020) my_electricCar.read_odometer() #the car has 102121 mlies!
子類內部也可以定義屬於自己的特有的方法:
#父類 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odomete_reading = 0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model return long_name def read_odometer(self): print("the car has " + str(self.odomete_reading) + " mlies!") def update_odometer(self,mlies): #修改引數odomete_reading的值 self.odomete_reading = mlies def increment_odometer(self,mlies): #通過內部的方法來使的內部資料增加 self.odomete_reading += mlies #子類 class ElectricCar(Car): #子類繼承父類的書寫方法 def __init__(self,make,model,year): super(ElectricCar, self).__init__(make,model,year) self.battery_size = 70 #子類中特有的方法 def read_battery_size(self): print("the electeric car's battery is " + str(self.battery_size) + " sizes !") def update_battery_size(self,new_size): self.battery_size = new_size my_electricCar = ElectricCar('tesla','Q3',920) my_electricCar.read_battery_size() #the electeric car's battery is 70 sizes ! my_electricCar.update_battery_size(90) my_electricCar.read_battery_size() #the electeric car's battery is 90 sizes !
子類中可以重定義父類中的方法:
#父類 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odomete_reading = 0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model return long_name def read_odometer(self): print("the car has " + str(self.odomete_reading) + " mlies!") def update_odometer(self,mlies): #修改引數odomete_reading的值 self.odomete_reading = mlies def increment_odometer(self,mlies): #通過內部的方法來使的內部資料增加 self.odomete_reading += mlies #子類 class ElectricCar(Car): #子類繼承父類的書寫方法 def __init__(self,make,model,year): super(ElectricCar, self).__init__(make,model,year) self.battery_size = 70 #子類中特有的方法 def read_battery_size(self): print("the electeric car's battery is " + str(self.battery_size) + " sizes !") def update_battery_size(self,new_size): self.battery_size = new_size #重定義父類的方法 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model + " and battery's size : " + str(self.battery_size) return long_name my_electricCar = ElectricCar('tesla','Q3',920) my_electricCar.read_battery_size() #the electeric car's battery is 70 sizes ! my_electricCar.update_battery_size(90) my_electricCar.read_battery_size() #the electeric car's battery is 90 sizes ! long_name = my_electricCar.get_descriptive_name() print(long_name) #920 tesla Q3 and battery's size : 90
將一個類的例項作為另一個類的屬性,例如我們電車是一個類,我們電池也可以是一個類,但是在電車這個類中可以把電池這個類的例項作為電車這個類的屬性
方便我們以後對電車的電池進行浮渣的操作,避免了把電車這個類弄得程式碼亂亂的
#父類 class Car(): def __init__(self,make,model,year): self.make = make self.model = model self.year = year self.odomete_reading = 0 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model return long_name def read_odometer(self): print("the car has " + str(self.odomete_reading) + " mlies!") def update_odometer(self,mlies): #修改引數odomete_reading的值 self.odomete_reading = mlies def increment_odometer(self,mlies): #通過內部的方法來使的內部資料增加 self.odomete_reading += mlies #子類 class ElectricCar(Car): #子類繼承父類的書寫方法 def __init__(self,make,model,year): super(ElectricCar, self).__init__(make,model,year) self.battery_size = Battery() #把Battery類的一個例項作為ElectricCar類的一個屬性,我們就可以在Battery中對電池進行操作 #重定義父類的方法 def get_descriptive_name(self): long_name = str(self.year) + " " + self.make + " " +self.model + " and battery's size : " + str(self.battery_size) return long_name class Battery(): def __init__(self): self.battery_size = 70 def updata_battery_size(self,new_size): self.battery_size = new_size def read_battery_size(self): print("the electeric car's battery is " + str(self.battery_size) + " sizes !") my_electricCar = ElectricCar('tesla','Q3',920) my_electricCar.battery_size.read_battery_size() #the electeric car's battery is 70 sizes !