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