讓類與類產生關係,有了多型的特性
提高**的復用性
#定義動物類,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...