最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python淺析多態(tài)與鴨子類型使用實(shí)例

 更新時(shí)間:2022年10月12日 15:43:55   作者:Python熱愛者  
python是一門解釋語(yǔ)言,但是同java等靜態(tài)語(yǔ)言一樣,是可以通過繼承的方式實(shí)現(xiàn)多態(tài)。而且python還有一個(gè)自己的特殊實(shí)現(xiàn)多態(tài)的方法,就是通過鴨子類型,來實(shí)現(xiàn)多態(tài)

什么多態(tài):同一事物有多種形態(tài)

為何要有多態(tài)=》多態(tài)會(huì)帶來什么樣的特性,多態(tài)性

  • 多態(tài)性指的是可以在不考慮對(duì)象具體類型的情況下而直接使用對(duì)象
  • 多態(tài)指的是一類事物有多種形態(tài),比如動(dòng)物有多種形態(tài):貓、狗、豬
class Animal: #同一類事物:動(dòng)物
    def talk(self):
        pass
class Cat(Animal): #動(dòng)物的形態(tài)之一:貓
    def talk(self):
        print('喵喵喵')
class Dog(Animal): #動(dòng)物的形態(tài)之二:狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): #動(dòng)物的形態(tài)之三:豬
    def talk(self):
        print('哼哼哼')
#實(shí)例化得到三個(gè)對(duì)象
>>> cat=Cat()
>>> dog=Dog()
>>> pig=Pig()

多態(tài)性指的是可以在不用考慮對(duì)象具體類型的情況下而直接使用對(duì)象,這就需要在設(shè)計(jì)時(shí),把對(duì)象的使用方法統(tǒng)一成一種:例如cat、dog、pig都是動(dòng)物,但凡是動(dòng)物肯定有talk方法,于是我們可以不用考慮它們?nèi)叩木唧w是什么類型的動(dòng)物,而直接使用

>>> cat.talk()
喵喵喵
>>> dog.talk()
汪汪汪
>>> pig.talk()
哼哼哼

綜上我們得知,多態(tài)性的本質(zhì)在于不同的類中定義有相同的方法名,這樣我們就可以不考慮類而統(tǒng)一用一種方式去使用對(duì)象,可以通過在父類引入抽象類的概念來硬性限制子類必須有某些方法名

import abc
# 指定metaclass屬性將類設(shè)置為抽象類,抽象類本身只是用來約束子類的,不能被實(shí)例化
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod # 該裝飾器限制子類必須定義有一個(gè)名為talk的方法
    def talk(self): # 抽象方法中無(wú)需實(shí)現(xiàn)具體的功能
        pass
class Cat(Animal): # 但凡繼承Animal的子類都必須遵循Animal規(guī)定的標(biāo)準(zhǔn)
    def talk(self):
        pass
cat=Cat() # 若子類中沒有一個(gè)名為talk的方法則會(huì)拋出異常TypeError,無(wú)法實(shí)例化

但其實(shí)我們完全可以不依賴于繼承,只需要制造出外觀和行為相同對(duì)象,同樣可以實(shí)現(xiàn)不考慮對(duì)象類型而使用對(duì)象,這正是Python崇尚的“鴨子類型”(duck typing):“如果看起來像、叫聲像而且走起路來像鴨子,那么它就是鴨子”。

比起繼承的方式,鴨子類型在某種程度上實(shí)現(xiàn)了程序的松耦合度,如下

#二者看起來都像文件,因而就可以當(dāng)文件一樣去用,然而它們并沒有直接的關(guān)系
class Txt: #Txt類有兩個(gè)與文件類型同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass
class Disk: #Disk類也有兩個(gè)與文件類型同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass

到此這篇關(guān)于Python淺析多態(tài)與鴨子類型使用實(shí)例的文章就介紹到這了,更多相關(guān)Python多態(tài)與鴨子類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

韶山市| 沧州市| 志丹县| 宁化县| 贵德县| 沈丘县| 安国市| 辽阳市| 华亭县| 凤阳县| 辽源市| 安西县| 板桥市| 颍上县| 阜新市| 高清| 淮南市| 中牟县| 荥经县| 锦屏县| 山东| 江华| 涟源市| 犍为县| 昌黎县| 忻州市| 志丹县| 孝昌县| 长岛县| 同心县| 双牌县| 蒲江县| 临夏县| 都匀市| 苏尼特左旗| 社旗县| 泉州市| 白银市| 开化县| 宁乡县| 祁门县|