Python面向對象特性 - 多態
阿新 • • 發佈:2019-02-01
對象特性 lis 耦合 water tuple col size 例如 txt Python中的多態
例如上述的Txt,Process類也可以通過這種方式來實現:
多態
多態指的是一類事物有多種形態。多態的實現需要依賴於繼承~
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方法,但是實現的方式都不一樣~
多態性
多態性是多態的一種應用:在不考慮實例類型的情況下使用實例。使用的場景往往是:調用不同對象的同名方法,不同的對象會用不同的方式來實現類似的功能;
調用者無需關心對象之間的差異性,只需根據不同的場景調用不同對象的同名方法即可~
def read(obj): obj.read() def write(obj): obj.write() read(txt) read(process) write(txt) write(process)
Txt,Process類中的read,write方法是應對不同的場景實現數據的讀取和寫入,所以在使用函數read,write時候只需要根據場景選擇對象即可~
鴨子類型
關於列表和元組的示例:
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
通過源碼可以看到 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(‘寫入進程數據‘)
.................^_^
Python面向對象特性 - 多態