日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python类的多态和多态性

發(fā)布時間:2025/3/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python类的多态和多态性 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

很多人喜歡將多態(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 wangwang

2 文件的多種形態(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)一的接口

def func(obj): # obj這個參數(shù)沒有類型限制,可以傳入不同類型的值obj.talk() # 調(diào)用的邏輯都一樣,執(zhí)行的結(jié)果卻不一樣func(peo2) func(pig2) func(d2)# say hello # say aoao # say wangwang

2 文件形態(tài)多態(tài)性的使用

def func(obj):obj.click()func(text) func(exe_file)open file execute file

3 序列數(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)用
class Cat(Animal): # 屬于動物的另外一種形態(tài):貓def talk(self):print('say miao')def func(animal): # 對于使用者來說,自己的代碼根本無需改動animal.talk()cat1 = Cat() # 實例出一只貓 func(cat1) # 甚至連調(diào)用方式也無需改變,就能調(diào)用貓的talk功能 #say miao

四、小結(jié)

多態(tài):同一種事物的多種形態(tài),動物分為人類,豬類(在定義角度)
多態(tài)性:一種調(diào)用方式,不同的執(zhí)行效果(多態(tài)性)

總結(jié)

以上是生活随笔為你收集整理的Python类的多态和多态性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。