繼承 多型(鴨子模型) 函式重啟

2021-09-24 14:25:24 字數 1531 閱讀 5850

如果兩個或者兩個以上的類具有相同的屬性和方法,我們可以抽取出來乙個類將共同的部分宣告到被抽取的類中。

這個被抽取出來的類我們稱之為父類,超類,基類

其他類我們稱之為子類/派生類

父類與子類之間的關係我們稱之為繼承。

注意:當乙個子類沒有繼承其他類的時候,則它預設繼承object類,換句話說,object類是一切類的基類。

在python中我們的繼承分為單繼承與多繼承。

當乙個子類只有乙個父類的時候,我們稱之為單繼承。

class 類名(父類)

​ 類體

注意:若未指明父類的時候,預設繼承object類,object類可以省略不寫。

繼承的特點:

子類可以直接使用父類未私有化屬性以及方法,但是父類不能使用子類特有的屬性以及方法。

父類私有化的屬性與方法,我們不能直接訪問,但是我們可以通過它暴露出來的介面進行訪問。

若子類擁有特殊的屬性的時候,我們需要在子類重寫_ _ init _ _ 方法,在子類的init方法中,我們需要將子類擁有的所有的屬性都宣告(包括父類中的),還需要手動呼叫父類中的init方法 super()._ _ init _ _/ 類名. _ _ init _ _

當子類中不存在特殊的屬性[我們沒有重寫init方法的時候],這時候系統會自動呼叫父類中的init方法,不需要我們自己手動呼叫。

當乙個子類有多個父類的時候我們稱之為多繼承。

使用多繼承的時候,當兩個父類中的屬性不相同的時候,預設呼叫寫在繼承列表裡面最前面的位置的父類的建構函式。

若兩個父類中的建構函式我們都想呼叫的情況下,這時候我們需要自己手動來進行呼叫。類名._ _ _ init _ _

當多個父類**現相同的方法名的時候,子類優先選擇寫在繼承列表前面的那個

class 類名 (父類1,父類2,…)

​ 類體

注意:()中為我們的繼承列表。

多型:本質上指一類事物的多種表現形態,它是依賴於繼承而存在。

在python中不存在真正的多型,因為python是乙個動態資料型別的語言。

如果有乙隻鳥,走路像鴨子,叫聲像鴨子,那麼我們就可以稱這只鳥叫鴨子。

我們不關心它的資料型別,我們只關心它的使用。

功能:判斷某個物件是否屬於某種型別

當這個物件屬於這種型別或者屬於這種型別的子類,那麼返回ture,否則返回false

功能:檢視指定物件的所有的屬性以及方法,以列表的方式返回。

當我們列印物件的時候,預設情況下顯示的是位址,當我們不想讓其顯示位址的時候,我們可以重寫系統中str函式,當執行print()或者str()函式的時候,會自動呼叫此方法。因此_ _ str _ _ 函式的返回值就是我們列印物件的資訊。

當乙個類中重寫了_ _ repr_ _ 函式,而沒有重寫_ _ str _ _ 函式的時候,我們可以使用_ _ str _ _ = _ _ repr_ _

+運算子過載,更改add

def __add__(self, other):

return person(self.name,self.age + other.age)

天天學Python(一) 鴨子模型

前言 很早之前看過python,鑑於遺忘太快,以此記之 鴨子模型 乙個物件只要 看起來像鴨子,走起路來像鴨子 那它就可以被看做是鴨子 這是動態語言奇妙的地方 看下面的 動物 class animal object def init self,name self.name name 成員變數 defr...

python的繼承 多型及鴨子型別特點

class animal object 編寫animal類 def run self print animal is running.class dog animal dog類繼承amimal類,沒有run方法 pass class cat animal cat類繼承animal類,有自己的run方...

物件導向模型分析(繼承,多型)

include include using namespace std class a struct b int main 類中的成員函式位於 段中 呼叫成員函式時物件位址 this 訪問成員變數 成員函式通過物件指標訪問成員變數 c 語法隱藏了物件位址的傳遞 繼承物件模型 include incl...