python------面向對象介紹之多態實例
阿新 • • 發佈:2018-09-29
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------面向對象介紹之多態實例