Python类的多态和多态性
生活随笔
收集整理的這篇文章主要介紹了
Python类的多态和多态性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
很多人喜歡將多態與多態性二者混為一談,然后百思不得其解,其實只要分開看,就會很明朗。
一、多態
多態指的是一類事物有多種形態,(一個抽象類有多個子類,因而多態的概念依賴于繼承)
- 序列數據類型有多種形態:字符串,列表,元組
- 動物有多種形態:人,狗,豬
1 動物的多種形態
# 動物有多種形態:人類、豬、狗 class Animal:def run(self): # 子類約定俗稱的必須實現這個方法raise AttributeError('子類必須實現這個方法')class People(Animal):def run(self):print('人正在走')class Pig(Animal):def run(self):print('pig is walking')class Dog(Animal):def run(self):print('dog is running')peo1 = People() pig1 = Pig() d1 = Dog()peo1.run() pig1.run() d1.run()# 人正在走 # pig is walking # dog is running import abcclass Animal(metaclass=abc.ABCMeta): # 同一類事物:動物@abc.abstractmethod # 上述代碼子類是約定俗稱的實現這個方法,加上@abc.abstractmethod裝飾器后嚴格控制子類必須實現這個方法def talk(self):raise AttributeError('子類必須實現這個方法')class People(Animal): # 動物的形態之一:人def talk(self):print('say hello')class Dog(Animal): # 動物的形態之二:狗def talk(self):print('say wangwang')class Pig(Animal): # 動物的形態之三:豬def talk(self):print('say aoao')peo2 = People() pig2 = Pig() d2 = Dog()peo2.talk() pig2.talk() d2.talk()# say hello # say aoao # say wangwang2 文件的多種形態
# 文件有多種形態:文件、文本文件、可執行文件 import abcclass File(metaclass=abc.ABCMeta): # 同一類事物:文件@abc.abstractmethoddef click(self):passclass Text(File): # 文件的形態之一:文本文件def click(self):print('open file')class ExeFile(File): # 文件的形態之二:可執行文件def click(self):print('execute file')text = Text() exe_file = ExeFile()text.click() exe_file.click()open file execute file二、多態性
注意:多態與多態性是兩種概念
多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容的函數。在面向對象方法中一般是這樣表述多態性:向不同的對象發送同一條消息,不同的對象在接收時會產生不同的行為(即方法)。也就是說,每個對象可以用自己的方式去響應共同的消息。所謂消息,就是調用函數,不同的行為就是指不同的實現,即執行不同的函數。
1 動物形態多態性的使用
多態性:一種調用方式,不同的執行效果(多態性)
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def func(obj):obj.run()func(peo1) func(pig1) func(d1)# 人正在走 # pig is walking # dog is running多態性依賴于:繼承
多態性:定義統一的接口
2 文件形態多態性的使用
def func(obj):obj.click()func(text) func(exe_file)open file execute file3 序列數據類型多態性的使用
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def func(obj):print(len(obj))func('hello') func([1, 2, 3]) func((1, 2, 3)) #5 #3 #3綜上可以說,多態性是一個接口(函數func)的多種實現(如obj.run(),obj.talk(),obj.click(),len(obj))
三、多態性的好處
其實大家從上面多態性的例子可以看出,我們并沒有增加新的知識,也就是說Python本身就是支持多態性的,這么做的好處是什么呢?
- 增加了程序的靈活性:以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal)
- 增加了程序額可擴展性:通過繼承Animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用
四、小結
多態:同一種事物的多種形態,動物分為人類,豬類(在定義角度)
多態性:一種調用方式,不同的執行效果(多態性)
總結
以上是生活随笔為你收集整理的Python类的多态和多态性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python文件操作:新建删除文件,获取
- 下一篇: Python基础教程:super()方法