python學習第十三站 物件導向C

2021-10-08 17:57:04 字數 3385 閱讀 9389

讓類與類產生關係,有了多型的特性

提高**的復用性

#定義動物類,run  sleep

class

animal()

:def

run(self)

:print

('running'

)def

sleep

(self)

:print

('sleeping'

)# a = animal()

# a.run()

• 繼承是物件導向三大特性之一

• 通過繼承我們可以使乙個類獲取到其他類中的屬性和方法

• 在定義類時,可以在類名後面的括號中指定當前類的父類(超類、基類)

• 繼承提高了類的復用性。讓類與類之間產生了關係。有了這個關係,才有了多型的特性

#繼承動物類

class

dog(animal)

:def

speak

(self)

:print

('wwwwwww...'

)d = dog(

)# d.speak()

# print(isinstance(d,animal))

#檢查乙個類是否是另乙個類的子類

print

(issubclass

(int

,object))

# 建立類的時候若省略類父類,則預設父類為objecct.

• 如果在子類中有和父類同名的方法,則通過子類例項去呼叫方法時,會呼叫子類的方法而不是父類的方法,這個特點我們稱之為方法的重寫(覆蓋)

• 當我們呼叫乙個物件的方法時:

• 會優先去當前物件中尋找是否具有該方法,如果有則直接呼叫

• 如果沒有,則去當前物件的父類中尋找,如果父類中有則直接呼叫父類中的方法

• 如果沒有,則去父類中的父類尋找,以此類推,直到找到object,如果依然沒有找到就報錯了

# 如果子類有與父類同名的方法,則通過子類呼叫該方法時,會呼叫子類裡的方法。這個特點就是方法的重寫/覆蓋overide

classa:

deftest

(self)

:print

("a"

)def

b(a)

:pass

defc

(b):

pass

c=c(

)c.test(

)#當呼叫乙個物件的方法時,首先會尋找當前物件是否有該方法,若有則直接呼叫。

#如果沒有,則去父類尋找。。。若找不到則報錯

• super()可以獲取當前類的父類

• 並且通過super()返回物件呼叫父類方法時,不需要傳遞self

#父類中的所有方法都會被子類繼承,包括特殊方法

classf(

)def

__init__

(self,name)

: self._name = name

class

s(f)

:def

__init__

(self,name,age)

: f.__init__(self,name)

self._age = age

# super()可以獲取當前類的父類

classf(

):def__init__

(self, name)

: self._name = name

class

s(f)

:def

__init__

(self, name, age)

:super

(s, self)

.__init__(name)

self._age = age

• 在python中是支援多重繼承的。也就是我們可以為乙個類同時制定多個父類

• 可以在類名的()後邊新增多個類,來實現多重繼承

• 多重繼承,會使子類同時擁有多個父類,並且會獲取到所有父類中的方法

• 在開發中沒有特殊情況,應該盡量避免使用多重繼承。因為多重繼承會讓我們的**更加複雜

• 如果多個父類中有同名的方法,則會先在第乙個父類中尋找,然後找第二個,找第三個…前面會覆蓋後面的

classa:

deftest

(self)

:print

("a"

)def

b(a)

:def

test2

(self)

:print

("b"

)def

c(b)

:pass

c=c(

)c.test(

)

# __bases__獲取當前類的父類

print

(c.__bases__)

# 是乙個元組。支援多重繼承,也就是乙個類同時指定多個父類

# 多個父類都有同名的方法時,呼叫前面的父類

class

g(f,c)

:pass

• 多型是物件導向的三大特性之一。從字面理解就是多種形態

• 乙個物件可以以不同形態去呈現

len()

只要函式內部封裝了特殊方法__len__,就可以用len函式

• 物件導向三大特性

• 封裝 確保物件中資料的安全

• 繼承 保證了物件的擴充套件性

• 多型 保證了程式的靈活性

屬性和方法

類屬性:直接在類中定義的屬性

只能通過類物件修改,無法通過例項物件修改

例項屬性:通過例項物件新增的屬性

只能通過例項物件訪問和修改,類物件無法訪問和修改

例項方法:

classa:

deftest

(self)

:#例項方法

print

('這是例項test方法'

)#類方法

@classmethod

deftest2

(cls)

:print

('這是類方法test'

)# 靜態方法

@staticmethod

deftest3()

:print

('靜態方法'

)a = a(

)a.test(

)# a.test2()

a.test2()等價於a.test2()

類方法可以通過類和例項呼叫

靜態方法:與本類無關的方法–工具方法

Python學習的第十三天(物件導向)

面向過程程式設計的特點 面向對向程式設計的特點 面向對向核心在於分配職責 類,相當於是乙個圖紙或者是模具 物件,是利用類所生產出來的實體的東西,只要有乙個類,我們就可以創造出無數的實體。創造出來的實體,我們叫做例項物件 建立物件前,要先明確 這個物件是用來幹什麼的 它應該有哪些屬性,是需要的。有哪些...

學習Python 第十三天

二叉樹 一,名詞 根邊 樹葉 葉子 沒有兒子 兄弟 具有相同父親的節點 祖父和孫子 路徑路徑的長 深度 從根到該點 高 從該點到葉子 祖先 後裔 真祖先 真後裔 二,樹的實現 class treenode def init self,data,firstchild,nextsibling self....

python第十三課

迭代器 l 1,2,3 索引 迴圈 for for i in l i for k in dic pass enumerate print dir 告訴我列表擁有的所有方法 print dir 告訴我列表擁有的所有方法 print dir 告訴我列表擁有的所有方法 print dir range 10...