1. 程式人生 > >python 類 - 繼承

python 類 - 繼承

pen ima ron 12c 空白 1.2 dom car 包含

繼承

什麽是繼承?

  • 編寫類時,並非總要從空白開始。如果要編寫的類是另一個現成類的特殊版本,可使用繼承。
  • 一個類繼承另一個類時,將自動獲得另一個類的所有屬性和方法。現有的類稱為父類,而新類稱為子類。
  • 子類繼承了其父類的所有屬性和方法,同時也可以定義自己的屬性和方法。

1、子類的方法__init__

創建子類時,首先要完成的是將父類的所有屬性和方法繼承,這裏使用子類的方法 __init__();


#繼承
#子類的方法__init__()

class 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) + "mile on it.")

def update_odomter(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 ElectricCar(Car):
"""電動汽車的獨特"""

def __init__(self,make,model,year):
"""初始化父類的屬性"""
super().__init__(make,model,year)

my_tesla = ElectricCar(‘tesla‘,‘model X‘,2018)
print(my_tesla.get_descriptive_name())


執行結果:

1 2018 Tesla Model X

註意點:

  1. 創建子類時,父類必須包含在當前文件中,且位於子類前面。
  2. super()是一個特殊函數,幫助父類和子類關聯起來。
  3. 父類也稱為超類(superclass)

1.1、給子類定義屬性和方法

在一個類繼承另一類後,可添加區分子類和父類所需的新屬性和方法。

技術分享圖片
 1 class Car():
 2     """一次模擬汽車的簡單嘗試"""
 3     def __init__(self,make,model,year):
 4         self.make = make
 5         self.model = model
6 self.year = year 7 self.odometer_reading = 0 8 9 def get_descriptive_name(self): 10 long_name = str(self.year) + " " + self.make + " " + self.model 11 return long_name.title() 12 13 def read_odometer(self): 14 print("This car has" + str(self.odometer_reading) + "
mile on it.") 15 16 def update_odomter(self,mileage): 17 if mileage >= self.odometer_reading: 18 self.odometer_reading = mileage 19 20 else: 21 print("You can‘t roll back an odometer!") 22 23 def increment_odometer(self,miles): 24 self.odometer_reading += miles 25 26 class ElectricCar(Car): 27 """電動汽車的獨特""" 28 29 def __init__(self,make,model,year): 30 """初始化父類的屬性""" 31 super().__init__(make,model,year) 32 33 # 給子類定義屬性和方法 34 self.battery_size = 70 35 36 #給子類定義屬性和方法 37 def describe_battery(self): 38 """打印一條描述電瓶容量的消息""" 39 print("This car has a " + str(self.battery_size) + "-KWh battery.") 40 41 my_tesla = ElectricCar(tesla,model X,2018) 42 print(my_tesla.get_descriptive_name()) 43 my_tesla.describe_battery()
View Code

執行結果:

1 2018 Tesla Model X
2 This car has a 70-KWh battery.

1.2、重寫父類的方法

  1. 如果父類中存在的一個方法完全不適用於子類,那麽可以直接在子類中對父類的方法進行重寫。
  2. 要求子類中重寫的方法要與父類的同名,這樣代碼就不會執行父類方法,而只關註子類的方法
 1 class Car():
 2     --snip--
 3 
 4      def fill_gas_tank():
 5         """油箱"""
 6         print("This car need a gas tank.")
 7 
 8 class ElectricCar(Car):
 9     --snip--
10     #重寫父類的方法
11     def fill_gas_tank():
12         """電動汽車沒有油箱"""
13         print("This car doesn‘t need a gas tank.")

1.3、將實例用作屬性

  1. 定義一個新類,並且沒有任何繼承
  2. 在子類中,添加一個屬性,指向新建的父類;這裏是self.battery = Battery()

 1 class Car():
 2     """一次模擬汽車的簡單嘗試"""
 3     def __init__(self,make,model,year):
 4         self.make = make
 5         self.model = model
 6         self.year = year
 7         self.odometer_reading = 0
 8 
 9     def get_descriptive_name(self):
10         long_name = str(self.year) + " " + self.make + " " + self.model
11         return long_name.title()
12 
13     def read_odometer(self):
14         print("This car has" + str(self.odometer_reading) + "mile on it.")
15 
16     def update_odomter(self,mileage):
17         if mileage >= self.odometer_reading:
18             self.odometer_reading = mileage
19 
20         else:
21             print("You can‘t roll back an odometer!")
22 
23     def increment_odometer(self,miles):
24         self.odometer_reading += miles
25 
26 
27 # 將實例用作屬性
28 class Battery():
29     def __init__(self, battery_size=70):
30         """初始化電瓶的屬性"""
31         self.battery_size = battery_size
32 
33     def describe_battery(self):
34         """打印一條描述電瓶容量的信息"""
35         print("This car has a" + str(self.battery_size) + "-KWh battery.")
36 
37 
38 class ElectricCar(Car):
39     """電動汽車的獨特"""
40 
41     def __init__(self,make,model,year):
42         """初始化父類的屬性"""
43         super().__init__(make,model,year)
44 
45         # 給子類定義屬性和方法
46         # self.battery_size = 70  #新屬性
47         #初始化父類的屬性,再初始化電動車特有的屬性
48         self.battery = Battery()
49 
50     # #給子類定義屬性和方法
51     # def describe_battery(self):
52     #     """打印一條描述電瓶容量的消息"""
53     #     print("This car has a " + str(self.battery_size) + "-KWh battery.")
54 
55     #重寫父類的方法
56     def fill_gas_tank():
57         """電動汽車沒有油箱"""
58         print("This car doesn‘t need a gas tank.")
59 
60 
61 my_tesla = ElectricCar(tesla,model X,2018)
62 print(my_tesla.get_descriptive_name())
63 # my_tesla.describe_battery()
64 my_tesla.battery.describe_battery()

執行結果:

1 2018 Tesla Model X
2 This car has a70-KWh battery.
繼續將實例用作屬性
class Car():
   --snip--# 將實例用作屬性
class Battery():
    --snip--

  #實例2
#打印一條消息,指出電瓶的續航裏程 def get_range(self): if self.battery_size == 70: range = 240 elif self.battery_size == 85: range = 70 msg = "This car can go approximately" + str(range) msg += "miles on a full charge." print(msg) class ElectricCar(Car): --snip-- tr my_tesla = ElectricCar(tesla,model X,2018) print(my_tesla.get_descriptive_name()) my_tesla.battery.describe_battery() my_tesla.battery.get_range()

執行結果:

1 2018 Tesla Model X
2 This car has a70-KWh battery.
3 This car can go approximately240miles on a full charge.

python 類 - 繼承