Python面向對象特性 - 多態

Python中的多態

多態

多態指的是一類事物有多種形態。多態的實現須要依賴於繼承~ide

import abc

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

    @abc.abstractmethod
    def write(self):
        pass

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

    def write(self):
        print('寫入文本數據')

class Process(File):   # 進程數據的讀寫
    def read(self):
        print('讀取進程數據')

    def write(self):
        print('寫入進程數據')

txt = Txt()
process = Process()

txt.read()
process.read()

上述示例中,Txt,Process都繼承自 接口類File,且都實現了 read,write方法,但read,write方法的實現都各不相同。Txt,Process爲同一類事物,不一樣的形態體如今它們都有read,write方法,可是實現的方式都不同~函數

多態性

多態性是多態的一種應用:在不考慮實例類型的狀況下使用實例。使用的場景每每是:調用不一樣對象的同名方法,不一樣的對象會用不一樣的方式來實現相似的功能;
 
調用者無需關心對象之間的差別性,只需根據不一樣的場景調用不一樣對象的同名方法便可~code

def read(obj):
    obj.read()

def write(obj):
    obj.write()

read(txt)
read(process)

write(txt)
write(process)

Txt,Process類中的read,write方法是應對不一樣的場景實現數據的讀取和寫入,因此在使用函數read,write時候只須要根據場景選擇對象便可~對象

鴨子類型

關於列表和元組的示例:blog

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面向對象特性 - 多態

Python面向對象特性 - 多態

 
經過源碼能夠看到 list 和 tuple 都是繼承自 object 類,相互之間沒有關係,可是它們都有不少功能相似的同名方法。這就是Python崇尚的鴨子類型,兩個類之間有不少的類似之處,功能也相似,可是這兩個類之間沒有繼承關係,也不是繼承於同一個接口類或者抽象類,而是兩個獨立的類,這就保證了程序組件的鬆耦合度~
 
例如上述的Txt,Process類也能夠經過這種方式來實現:繼承

class Txt():   # 文本數據的讀寫
    def read(self):
        print('讀取文本數據')

    def write(self):
        print('寫入文本數據')

class Process():   # 進程數據的讀寫
    def read(self):
        print('讀取進程數據')

    def write(self):
        print('寫入進程數據')

.................^_^接口

相關文章
相關標籤/搜索