python面向物件的組合和多型、多型性
阿新 • • 發佈:2021-07-14
組合
組合:一個物件擁有一個屬性,該屬性是另外一個物件
解決類與類之間的冗餘問題: 1. 繼承: 滿足什麼是什麼的關係 2. 組合: 滿足什麼有什麼的關係 比如bar中有n,但我Foo想調n,這是就用到了組合,obj2賦值給obj1.z,然後obj1就可以呼叫n class Foo: x = 1 def __init__(self, m): self.m = m def func1(self): return self.m class Bar(): y = 2 def __init__(self, n): self.n = n def func2(self): return self.n obj1 = Foo(10) obj2 = Bar(20) obj1.z = obj2 print(obj1.z.n)
多型與多型性
多型:一種事物的多種狀態
1.水:固定水,液態水,水蒸氣
2.動物:人, 狗, 豬
繼承:解決冗餘問題 多型類中繼承:不是讓子類遺傳父類的屬性和方法, 是用來給子類定製標準的 多型帶來的特性:在不用考慮物件資料型別的情況下,直接呼叫物件的方法 制定子類的標準 import abc # abstract => 抽象 # 該類已經為抽象類了,是用來給子類定製標準的 class Animal(metaclass=abc.ABCMeta): @abc.abstractmethod def speak(self): pass @abc.abstractmethod #修飾符 def run(self): pass class People(Animal): def speak(self): pass class Dog(Animal): def speak(self): pass class Pig(Animal): def speak(self): pass pass obj1 = People() obj2 = Dog() obj3 = Pig() obj1.speak() obj2.speak() obj3.speak() 約定熟成的:也就是鴨子型別 Python崇尚鴨子型別,即‘如果看起來像、叫聲像而且走起路來像鴨子,那麼它就是鴨子’ python程式設計師通常根據這種行為來編寫程式。例如,如果想編寫現有物件的自定義版本,可以繼承該物件 也可以建立一個外觀和行為像,但與它無任何關係的全新物件,後者通常用於儲存程式元件的鬆耦合度。 class People(): def speak(self): pass class Dog(): def speak(self): pass class Pig(): def speak(self): pass obj1 = People() obj2 = Dog() obj3 = Pig() obj1.speak() obj2.speak() obj3.speak()