python 多態的理解


 1 class Human(object):  # 父類 :創建“人”類
 2 
 3     def __init__(self):
 4 
 5            print('Ill pound the code and buy you a bag')  # 我會敲打碼,給你買包包
 6 
 7 class Man(Human):  # 1)子類1 創建“男人”類
 8 
 9     def __init__(self):
10 
11            print('In hs, we should have the knowledge to drink wine.The President up, the kitchen down')  # 在衡水,要文武雙全,有知識,會喝酒;上的總裁,下的廚房
12 
13 class Woman(Human):# 2)子類2 創建“女人”類
14 
15     def __init__(self):
16 
17            print('If a man loves me, I dont care if he has a house or a car.Woman?Do you believe a')  # 如果男人愛我,我不會在意他有沒有房子車子。呵呵女人啊?你信了那只能說明你太天真了。
18 
19 print('human:')
20 
21 h = Human()
22 
23 print('man:')
24 
25 m = Man()
26 
27 print('woman:')
28 
29 w = Woman()  # 分別對 人類、男人類、女人類創建一個變量h、m、w
30 
31 print(isinstance(h,Human))#isinstance舉例
32 
33 print(isinstance(m,Man))
34 
35 print(isinstance(m,Human))  #  分別判斷h是人類嗎、m是男人類嗎、m是人類嗎,輸出結果全部為是。
36 
37 #輸出結果是:
38 # human:
39 # Ill pound the code and buy you a bag
40 # man:
41 # In hs, we should have the knowledge to drink wine.The President up, the kitchen down
42 # woman:
43 # If a man loves me, I dont care if he has a house or a     
44      car.Woman?Do you believe a
45 # True
46 # True
47 # True
View Code

這就是變量的多態;另外當m調用__init__方法時輸出的內容和Human的__init__是不一樣的,這就是多態之函數的多態。

鴨子類型:
參考鴨子類型,鴨子類型(英語:duck typing)是動態類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由"當前方法和屬性的集合"決定。這個概念的名字來源於由James Whitcomb Riley提出的鴨子測試,“鴨子測試”可以這樣表述:
“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”
在鴨子類型中,關注的不是對象的類型本身,而是它是如何使用的。例如,在不使用鴨子類型的語言中,我們可以編寫一個函數,它接受一個類型為"鴨子"的對象,並調用它的"走"和"叫"方法。在使用鴨子類型的語言中,這樣的一個函數可以接受一個任意類型的對象,並調用它的"走"和"叫"方法。如果這些需要被調用的方法不存在,那么將引發一個運行時錯誤。任何擁有這樣的正確的"走"和"叫"方法的對象都可被函數接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子類型通常得益於"不"測試方法和函數中參數的類型,而是依賴文檔、清晰的代碼和測試來確保正確使用。
綜上:鴨子類型,就是使用了貌似不屬於自己的方法(其他函數的方法),自己這個 函數,實例化后會改變本質


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM