1. 程式人生 > >python------面向對象介紹之多態實例

python------面向對象介紹之多態實例

self pre clas dog bstr 我們 特性 ima 對象相等

一. 多態

一種接口,多種實現。

多態性(polymorphisn)是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。 簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。 那麽,多態的作用是什麽呢?我們知道,封裝可以隱藏實現細節,使得代碼模塊化;繼承可以擴展已存在的代碼模塊(類);它們的目的都是為了——代碼重用。 而多態則是為了實現另一個目的——接口重用!多態的作用,就是為了類在繼承和派生的時候,保證使用“家譜”中任一類的實例的 某一屬性時的正確調用。 Pyhon 很多語法都是支持多態的,比如 len(),sorted(), 你給len傳字符串就返回字符串的長度,傳列表就返回列表長度。
 1
class Animal(object): 2 def __init__(self, name): # Constructor of the class 3 self.name = name 4 5 def talk(self): # Abstract method, defined by convention only 6 pass 7 #raise NotImplementedError("Subclass must implement abstract method") 8 9 def animal_talk(obj):
10 obj.talk() 11 12 class Cat(Animal): 13 def talk(self): 14 print(%s: 喵喵喵! % self.name) 15 16 17 class Dog(Animal): 18 def talk(self): 19 print(%s: 汪!汪!汪! % self.name) 20 21 22 23 d = Dog("xiaolaozi") 24 #d.talk() 25 26 c = Cat("zhangsan") 27 #c.talk() 28 29
#以上是分別調用才可以實現一起叫,有沒有一種可能用animal.talk(),一次調用讓他們一起叫? 30 animal_talk(d) 31 animal_talk(c) 32 #def animal_talk(obj): 33 obj.talk() 還沒有放到父類裏面,還不是真正意義上的多態。用靜態的方法可以放到父類裏,後面再學。哈哈哈

python------面向對象介紹之多態實例