本文為了說明例子,用中文寫在了class里面,一般編程最好不要那么寫
本文目錄
- 所謂多型
- 多型的作用
- 定義統一的介面
- 統一所有子類的標準
所謂多型
,就是同一種事物的多種形態
比如
class 載具:
pass
class 坦克(載具):
pass
class 裝甲車(載具):
pass
class 武直(載具):
pass
多型的作用
可以在不考慮物件具體型別的情況下而直接使用物件
class 載具: # 統一所有子類的方法
def 移動(self):
print('載具開始移動',end=' ')
class 坦克(載具):
def 移動(self):
super().移動()
print('履帶機動')
class 裝甲車(載具):
def 移動(self):
super().移動()
print('輪式機動')
class 武直(載具):
def 移動(self):
super().移動()
print('飛行機動')
print(坦克(),裝甲車(),武直())
print('='*100)
效果

class 載具: # 統一所有子類的方法
def 移動(self):
print('載具開始移動',end=' ')
class 坦克(載具):
def 移動(self):
super().移動()
print('履帶機動')
class 裝甲車(載具):
def 移動(self):
super().移動()
print('輪式機動')
class 武直(載具):
def 移動(self):
super().移動()
print('飛行機動')
#定義
objA=坦克()
objB=裝甲車()
objC=武直()
#呼叫
objA.移動()
objB.移動()
objC.移動()
效果

定義統一的介面
class 載具: # 統一所有子類的方法
def 移動(self):
print('載具開始移動',end=' ')
class 坦克(載具):
def 移動(self):
super().移動()
print('履帶機動')
class 裝甲車(載具):
def 移動(self):
super().移動()
print('輪式機動')
class 武直(載具):
def 移動(self):
super().移動()
print('飛行機動')
##定義
objA=坦克()
objB=裝甲車()
objC=武直()
#定義統一的介面
def 載具移動(載具):
載具.移動()
載具移動(objA)
載具移動(objB)
載具移動(objC)
效果

統一所有子類的標準
import abc
class 載具(metaclass=abc.ABCMeta): # 統一所有子類的標準
@abc.abstractmethod
def 移動(self):
print('載具開始移動',end=' ')
class 坦克(載具):
def 移動(self):
super().移動()
print('履帶機動')
class 裝甲車(載具):
def 移動(self):
super().移動()
print('輪式機動')
class 武直(載具):
def 移動(self):
super().移動()
print('飛行機動')
##定義
objA=坦克()
objB=裝甲車()
objC=武直()
#定義統一的介面
def 載具移動(載具):
載具.移動()
載具移動(objA)
載具移動(objB)
載具移動(objC)
效果與前面一致,不過區別在于不能直接在class下寫pass,必須要有一個父類的功能(比如這里的移動),哪怕這個移動本身沒有功能,比如:
import abc
class 載具(metaclass=abc.ABCMeta): # 統一所有子類的標準
@abc.abstractmethod
def 移動(self):
print('載具開始移動',end=' ')
class 坦克(載具):
def 移動(self):
pass
class 裝甲車(載具):
def 移動(self):
pass
class 武直(載具):
def 移動(self):
pass
##定義
objA=坦克()
objB=裝甲車()
objC=武直()
#定義統一的介面
def 載具移動(載具):
載具.移動()
載具移動(objA)
載具移動(objB)
載具移動(objC)
不然會報錯


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/303619.html
標籤:其他
