溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python面向?qū)ο筇匦?- 多態(tài)

發(fā)布時(shí)間:2020-07-19 02:28:13 來(lái)源:網(wǎng)絡(luò) 閱讀:300 作者:LJ_baby 欄目:編程語(yǔ)言

Python中的多態(tài)

多態(tài)

多態(tài)指的是一類(lèi)事物有多種形態(tài)。多態(tài)的實(shí)現(xiàn)需要依賴(lài)于繼承~

import abc

class File(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def read(self):
        pass

    @abc.abstractmethod
    def write(self):
        pass

class Txt(File):   # 文本數(shù)據(jù)的讀寫(xiě)
    def read(self):
        print('讀取文本數(shù)據(jù)')

    def write(self):
        print('寫(xiě)入文本數(shù)據(jù)')

class Process(File):   # 進(jìn)程數(shù)據(jù)的讀寫(xiě)
    def read(self):
        print('讀取進(jìn)程數(shù)據(jù)')

    def write(self):
        print('寫(xiě)入進(jìn)程數(shù)據(jù)')

txt = Txt()
process = Process()

txt.read()
process.read()

上述示例中,Txt,Process都繼承自 接口類(lèi)File,且都實(shí)現(xiàn)了 read,write方法,但read,write方法的實(shí)現(xiàn)都各不相同。Txt,Process為同一類(lèi)事物,不同的形態(tài)體現(xiàn)在它們都有read,write方法,但是實(shí)現(xiàn)的方式都不一樣~

多態(tài)性

多態(tài)性是多態(tài)的一種應(yīng)用:在不考慮實(shí)例類(lèi)型的情況下使用實(shí)例。使用的場(chǎng)景往往是:調(diào)用不同對(duì)象的同名方法,不同的對(duì)象會(huì)用不同的方式來(lái)實(shí)現(xiàn)類(lèi)似的功能;
 
調(diào)用者無(wú)需關(guān)心對(duì)象之間的差異性,只需根據(jù)不同的場(chǎng)景調(diào)用不同對(duì)象的同名方法即可~

def read(obj):
    obj.read()

def write(obj):
    obj.write()

read(txt)
read(process)

write(txt)
write(process)

Txt,Process類(lèi)中的read,write方法是應(yīng)對(duì)不同的場(chǎng)景實(shí)現(xiàn)數(shù)據(jù)的讀取和寫(xiě)入,所以在使用函數(shù)read,write時(shí)候只需要根據(jù)場(chǎng)景選擇對(duì)象即可~

鴨子類(lèi)型

關(guān)于列表和元組的示例:

m_lst = [1, 2, 3]
m_tuple = ('a', 'b', 'c', 'd')
print(m_lst.__len__())     # 3
print(m_tuple.__len__())     # 4

print(m_lst.count(1))     # 1
print(m_tuple.count('c'))     # 1

Python面向?qū)ο筇匦?- 多態(tài)

Python面向?qū)ο筇匦?- 多態(tài)

 
通過(guò)源碼可以看到 list 和 tuple 都是繼承自 object 類(lèi),相互之間沒(méi)有關(guān)系,但是它們都有很多功能類(lèi)似的同名方法。這就是Python崇尚的鴨子類(lèi)型,兩個(gè)類(lèi)之間有很多的相似之處,功能也類(lèi)似,但是這兩個(gè)類(lèi)之間沒(méi)有繼承關(guān)系,也不是繼承于同一個(gè)接口類(lèi)或者抽象類(lèi),而是兩個(gè)獨(dú)立的類(lèi),這就保證了程序組件的松耦合度~
 
例如上述的Txt,Process類(lèi)也可以通過(guò)這種方式來(lái)實(shí)現(xiàn):

class Txt():   # 文本數(shù)據(jù)的讀寫(xiě)
    def read(self):
        print('讀取文本數(shù)據(jù)')

    def write(self):
        print('寫(xiě)入文本數(shù)據(jù)')

class Process():   # 進(jìn)程數(shù)據(jù)的讀寫(xiě)
    def read(self):
        print('讀取進(jìn)程數(shù)據(jù)')

    def write(self):
        print('寫(xiě)入進(jìn)程數(shù)據(jù)')

.................^_^

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI