多型
1)、什么是多型
多型指的是同一種型別的事物,不同的形態
2)、多型的目的
“多型” 也稱之為 “多型性”,目的是為了 在不知道物件具體型別的情況下,統一物件呼叫方法的規范(比如:名字)
3)、多型的三種表現形式
① 繼承父類
② 繼承抽象類
③ 鴨子型別
1、繼承父類
多型的表現 “形式之一” 就是 繼承父類
如何實作:
- 先抽象(即總結子類和父類的相同屬性及方法),再繼承
父類:定制一套統一的規范(比如:方法名統一)
子類:繼承父類,遵循父類的統一的規范(比如:子類遵循父類方法名的統一)
# 動物類
class Animal:
def eat(self):
pass
def speak(self):
pass
# 豬類
class Pig(Animal):
def eat(self):
print("bia嘰...")
def speak(self):
print("哼哼哼...")
# 貓類
class Cat(Animal):
def eat(self):
print("咬嘰...")
def speak(self):
print("喵喵喵...")
# 狗類
class Dog(Animal):
def eat(self):
print("舔嘰...")
def speak(self):
print("汪汪汪...")
animal1 = Pig()
animal2 = Cat()
animal3 = Dog()
animal1.speak()
animal2.speak()
animal3.speak()
執行結果:
哼哼哼...
喵喵喵...
汪汪汪...
注意:在python中不會強制限制 子類 必須要遵循 父類 的規范,所以出現了 繼承抽象類
2、繼承抽象類
1)什么是抽象類
在python內置的abc模塊中,有一個抽象類,使用此類,使子類必須遵循父類的編碼規范(不遵循,呼叫即報錯)
2)抽象類的作用
讓子類必須遵循父類的編碼規范
3)如何實作抽象類
父類需要繼承abc模塊中:metaclass=abc.ABCMeta
在父類的需要遵循編碼規范的方法上裝飾上abc.abstractmethod
注意:子類必須要按照父類的方法撰寫規范,缺一不可,(只要父類中有幾個抽象方法,子類就要有幾個抽象方法)
例:寫一個抽象類
import abc # 父類需要繼承abc模塊中:metaclass=abc.ABCMeta class Animal(metaclass=abc.ABCMeta): # 在父類的需要遵循編碼規范的方法上裝飾上abc.abstractmethod @abc.abstractmethod def eat(self): pass # 在父類的需要遵循編碼規范的方法上裝飾上abc.abstractmethod @abc.abstractmethod def speak(self): pass # 豬類 class Pig(Animal): # 根據父類編碼規范必須要有eat方法(方法名不能變) def eat(self): print("bia嘰...") # 根據父類編碼規范必須要有speak方法(方法名不能變) def speak(self): print("哼哼哼...") # 此方法無要求,可有可無 def run(self): print("pig is running...")
pig_obj = Pig()
3、鴨子型別
1)什么是鴨子型別
不同的物件,只要長得像鴨子,動物行為像鴨子,那就是鴨子!
“鴨子型別” 是多型的表現形式之一
PS:多型(繼承父類、繼承抽象類、鴨子型別)其實就是代碼的規范形式,即編碼規范
2)如何實作鴨子型別
不同物件,先抽象出相同型別的方法,給他們定制一套統一的規范
所有的類,在定義時都按照統一的規范進行撰寫
注意:在python中,強烈推薦鴨子型別
# 動物類:定義代碼規范
class Animal:
def eat(self):
pass
def speak(self):
pass
# 豬類:按照動物類的代碼規范來撰寫
class Pig:
def eat(self):
print("bia嘰...")
def speak(self):
print("哼哼哼...")
# 貓類:按照動物類的代碼規范來撰寫
class Cat:
def eat(self):
print("咬嘰...")
def speak(self):
print("喵喵喵...")
# 狗類:按照動物類的代碼規范來撰寫
class Dog:
def eat(self):
print("舔嘰...")
def speak(self):
print("汪汪汪...")
4、多型總結
多型的三種表現形式:
繼承父類:
耦合度高,程式的可擴展性低
繼承抽象類:(強烈不推薦使用)
耦合度極高,程式的擴展性極低
鴨子型別:(強烈推薦使用)
耦合度低,程式的可擴展性高
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193880.html
標籤:Python
上一篇:爬取唯品會口紅資料,這次哪家打折力度最大?我看到0.8折的
下一篇:python面對物件的三大特性
