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