您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關python中什么是類的多態,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
多態首先是建立在繼承的基礎上的,先有繼承才能有多態。多態是指不同的子類在繼承父類后分別都重寫覆蓋了父類的方法,即父類同一個方法,在繼承的子類中表現出不同的形式。多態成立的另一個條件是在創建子類時候必須使用父類new子類的方式。
Fu f1 = new Zi1(); Fu f2 = new Zi2(); f1.c(); f2.c();
子類Zi1,Zi2繼承了父類Fu,并且重寫了父類的方法c()
然后通過f1,和f2去調用子類重寫父類后的這個方法。即還有一個成立條件是子類必須重寫父類的方法。
面向對象的三個基本特征是:封裝、繼承、多態。
比如,你和你朋友同時繼承了人這個類中打人的方法,但是你用拳頭打人和你朋友用巴掌打人的方法都是打人方法,卻表現出不同的形式,這就是現實生活中多態的理解。
關于多態,有一個被稱作“鴨子類型”(duck typeing)的東西,其含義在維基百科中被表述為:
在程序設計中,鴨子類型(英語:duck typing)是動態類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由當前方法和屬性的集合決定。這個概念的名字來源于由 James Whitcomb Riley 提出的鴨子測試(見下面的“歷史”章節),“鴨子測試”可以這樣表述:“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”
在 python 中多態的經典使用可以用兩句話來總結對擴展開放和對修改封閉,即著名的「開閉」原則。對擴展開放即可以隨意的增加父類的子類;對修改封閉即對于依賴父類的函數,新增子類對該函數無任何影響無需做任何修改。
我們可以通過以下代碼來加深理解:
#!/usr/bin/env python3 # -*- coding:utf-8 -*- class Person: def __init__(self, name, age): self.name = name self.age = age def print_age(self): print("%s's age is %s" % (self.name, self.age)) class Man(Person): def print_age(self): print("Mr. %s's age is %s" %(self.name, self.age)) class Woman(Person): def print_age(self): print("Ms. %s's age is %s" %(self.name, self.age)) def person_age(person): person.print_age() person = Person("kevin", 23) man = Man("Bob", 33) woman = Woman("Lily", 28) person_age(person) person_age(man) person_age(woman)
以上代碼執行結果如下:
kevin's age is 23 Mr. Bob's age is 33 Ms. Lily's age is 28
在以上代碼中函數 person_age 函數的輸入參數為類 Person 的實例,但是在實際執行過程中 Person 的子類 Man 和 Woman 的示例同樣可以在 person_age 函數中正常運行,這既是類的多態的作用。實際上任何實現了函數 print_age 函數的類均可作為 person_age 函數的參數且能夠正常工作,這既是前面提到的「鴨子類型」。
上述就是小編為大家分享的python中什么是類的多態了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。