要編寫的類是另一個現(xiàn)成類的特殊版本,可使用繼承繼 。
一個類繼承繼 另一個類時,它將自動獲得另一個類的所有屬性和方法;
原有的 類稱為父類父 ,而新類稱為子類子 。
子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法。
class Car():#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=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 ElectrivCar(Car):#定義子類時,必須在括號內(nèi)指定父類的名稱;父類必須包含在當前文件中,且位于子類前面。
def __init__(self,make,model,year):
super().__init__(make,model,year)#初始化父類屬性,,這行代碼讓 Python 調(diào)用 ElectricCar 的父類的方法 __init__() ,讓 ElectricCar 實例包含父類的所有屬性。父類也稱為 超類 ( superclass ),名稱 super
my_tesla = ElectrivCar('tesla','model s',2016)
print(my_tesla.get_descriptive_name())
print("*********************")
讓一個類繼承另一個類后,可添加區(qū)分子類和父類所需的新屬性和方法,
class Car():
--snip--
class ElectrivCar(Car):
def __init__(self,make,model,year):
super().__init__(make,model,year)
self.battery_size=70#添加了新屬性 self.battery_size ,并設(shè)置其初始值
def describe_battery(self):
print("This car has a "+str(self.battery_size)+"-kwh battery.")
在使用父類的方法,只要它不符合子類模擬的實物的行為,都可對其進行重寫:
def ElectrivCar(Car):
--snip--
def fill_gas_tank():#對方法進行重新
print("This car donesn't need a gas tank!")
使用繼承時,可讓子類保留從父類哪里繼承而來的長處,并提出不需要的短處