1. 程式人生 > 實用技巧 >類的繼承

類的繼承

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 = 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) 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 !