1. 程式人生 > >Python12(介面繼承,子類呼叫父類,多型)

Python12(介面繼承,子類呼叫父類,多型)

介面繼承:

基類不用實現內部邏輯,只是為了規範子類,可以用abc模組中以新增裝飾器的方式實現

 1 import abc
 2 class All_file(metaclass=abc.ABCMeta):
 3 
 4     @abc.abstractmethod
 5     def read(self):
 6         pass
 7 
 8     @abc.abstractmethod
 9     def write(self):
10         pass
11 
12 class Disk(All_file):
13     def read(self):
14 print("Disk read") 15 def write(self): 16 pass 17 class Cdrom(All_file): 18 def read(self): 19 pass 20 def write(self): 21 pass 22 23 m1 = Disk() 24 m1.read() 25 m1.write()
View Code

在子類中呼叫父類方法:

 1 class Vehiale:
 2     country = "China
" 3 def __init__(self,name,speed,load,power): 4 self.name = name 5 self.speed = speed 6 self.load = load 7 self.power = power 8 9 def run(self): 10 print("kaidongla") 11 12 class Subway(Vehiale): 13 def __init__(self,name,speed,load,power,line):
14 Vehiale.__init__(self,name,speed,load,power) 15 self.line = line 16 def show_info(self): 17 print(self.speed,self.line,self.load,self.name,self.power) 18 def run(self): 19 Vehiale.run(self) 20 print("%s %s 線,開動啦" %(self.name,self.line)) 21 22 line13=Subway("100m/s",13,1000,"北京地鐵","") 23 line13.show_info() 24 line13.run()
View Code

多型:

不同的例項可以去呼叫同一個方法,但實現的效果不同。

 1 class H2O:
 2     def __init__(self,name,temperature):
 3         self.name = name
 4         self.temperature = temperature
 5     def turn_ice(self):
 6         if self.temperature < 0:
 7             print('[%s]溫度太低結冰了'%self.name)
 8         elif self.temperature > 0 and self.temperature < 100:
 9             print('[%s]液化成水'%self.name)
10         elif self.temperature>100:
11             print('[%s]溫度太高變成水蒸氣了'%self.name)
12 
13 class Water(H2O):
14     pass
15 class Ice(H2O):
16     pass
17 class Steam(H2O):
18     pass
19 
20 
21 
22 w1 = Water('',25)
23 i1 = Ice('',-20)
24 s1 = Steam('蒸汽',300)
25 
26 # w1.turn_ice()
27 # i1.turn_ice()
28 # s1.turn_ice()
29 #多型反映的是一種執行時候的狀態
30 def func(obj):
31     obj.turn_ice()
32 
33 func(w1)
34 func(i1)
35 func(s1)
View Code