关于python中多态的理解。
學習到多態的時候,不確定自己是否完全理解了python的多態,于是Google觀看了眾多資料和文獻,發現很多編程大佬講得過于抽象,不便于新手理解,這違背了python的初衷:簡單。
所以我在此用通俗一點的方式作了一個總結。
先貼一段代碼,在python3中舉例:
(為了給非科班出身以及中學英語偏科的python學習者更友好的閱讀體驗,w3n特意添加了中文注釋,可以不細看代碼,通過注釋閱讀,主要目的是邏輯理解,代碼次要)
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class Human(object): # 創建“人”類def __init__(self):print('I can speak') # 我會講話 class Man(Human): # 創建“男人”類def __init__(self):print('I have to prepare money for woman in usually in China') # 在中國,通常男人必須為娶妻、處對象而準備禮金和不少的錢 class Woman(Human):創建“女人”類def __init__(self):print('I do not need the money from the man if he love me. aha, you are so cute that you believe it') # 如果男人愛我,我不會在意他有沒有為我花錢。啊哈?你信了那只能說明你太天真了。 print('human:') h = Human() print('man:') m = Man() print('woman:') w = Woman() # 分別對 人類、男人類、女人類創建一個變量h、m、w print(isinstance(h,Human)) print(isinstance(m,Man)) print(isinstance(m,Human)) # look at this, it's true, m is not only man but also human 分別判斷h是人類嗎、m是男人類嗎、m是人類嗎,輸出結果全部為是。 #輸出結果是: #human: #I can speak #man: #I have to prepare money for woman in usually in China #woman: #I do not need the money from the man if he love me. aha, you are so cute that you believe it #True #True #True這個例子中m(變量,類似 “x =3 ”的x)不僅是 Man(對比int)類別,也是Human(object)類別,這就是變量的多態;另外當m調用__init__方法時輸出的內容和Human的__init__是不一樣的,這就是多態之函數的多態。
另外為了python的學習者能夠更好的學習python,opw3n特意在此告知,python的多態在國內的參考文獻中還存在不同的爭議,即便你不理解python的多臺也沒關系,并不影響你繼續學習python,可以暫且跳過“python的多態”。
關于面向對象的多態理解,建議參考鴨子類型。
為了方便閱讀,從維基百科引入如下內容:
鴨子類型:
參考鴨子類型,鴨子類型(英語:duck typing)是動態類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由"當前方法和屬性的集合"決定。
這個概念的名字來源于由James Whitcomb Riley提出的鴨子測試,“鴨子測試”可以這樣表述:
“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”
在鴨子類型中,關注的不是對象的類型本身,而是它是如何使用的。例如,在不使用鴨子類型的語言中,我們可以編寫一個函數,它接受一個類型為"鴨子"的對象,并調用它的"走"和"叫"方法。在使用鴨子類型的語言中,這樣的一個函數可以接受一個任意類型的對象,并調用它的"走"和"叫"方法。
如果這些需要被調用的方法不存在,那么將引發一個運行時錯誤。任何擁有這樣的正確的"走"和"叫"方法的對象都可被函數接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子類型通常得益于"不"測試方法和函數中參數的類型,而是依賴文檔、清晰的代碼和測試來確保正確使用。
如有錯誤,請不吝賜教。
總結
以上是生活随笔為你收集整理的关于python中多态的理解。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3中pip的安装、常见问题及
- 下一篇: python3对urllib和urlli