python中的面向物件學習以及類的多型
阿新 • • 發佈:2018-11-23
接下來類的第三個重要的特性:多型(一種介面,多種實現)
多型性(polymorphisn)是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。
那麼,多型的作用是什麼呢?我們知道,封裝可以隱藏實現細節,使得程式碼模組化;繼承可以擴充套件已存在的程式碼模組(類);它們的目的都是為了——程式碼重用。而多型則是為了實現另一個目的——介面重用!多型的作用,就是為了類在繼承的時候,保證使用“家譜”中任一類的例項的某一屬性時的正確呼叫。
Python 很多語法都是支援多型的,比如 len(),sorted(), 你給len傳字串就返回字串的長度,傳列表就返回列表長度。
class Animal(object): def __init__(self, name): # Constructor of the class self.name = name def talk(self): # Abstract method, defined by convention only raise NotImplementedError("Subclass must implement abstract method") class Cat(Animal): def talk(self): print('%s: 喵喵喵!' %self.name) class Dog(Animal): def talk(self): print('%s: 汪!汪!汪!' %self.name) def animal_talk(obj): #一個介面,多種實現,相當於是父類的屬性,所以是在全域性定義中 obj.talk() c = Cat('小晴') d = Dog('李磊') animal_talk(c) animal_talk(d) # 也就是一個介面可以讓cat類和dog類都實現功能,只要把引數修改就好