1. 程式人生 > >python中的面向物件學習以及類的多型

python中的面向物件學習以及類的多型

接下來類的第三個重要的特性:多型(一種介面,多種實現)

多型性(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類都實現功能,只要把引數修改就好

在這裡插入圖片描述