「」"
繼承 —> 從已經有的類建立新類的過程,提供繼承資訊的叫父類(超類、基類),
得到繼承資訊的叫子類(派生類)。繼承是實現**復用的方式,繼承關係是一種is-a關係。
a student is a person. a teacher is a person.
「」"
class person:
'''定義人類
屬性name == 名字
屬性nationality == 位址
'''def __init__(self, name, nationality):
self.name = name
self.nationality = nationality
def eat(self):
print(f'正在吃飯')
def walk(self):
print(f'正在行走')
def sleep(self):
print(f'正在睡覺')
class artist(person): #繼承人的類 person
'''藝術家類
'''def play_piano(self):
print(f'正在彈鋼琴')
#藝術家特有的行為
def play_violin(self):
print(f'正在拉小提琴')
class monk(person): #繼承人的類 person
'''和尚類
''' def chant(self):
print(f'正在念經')
#和尚特有的行為
def knock_the_bell(self):
print(f'正在敲鐘')
def main():
a = monk('王大錘','重慶'』)
a.chat()
#本次呼叫沒用到nationality引數
#輸出為: 王大錘正在念經!!!
if __name__ == '__main__'
main()
python中允許多重繼承(乙個類可以有多個父類)
但是實際開發時應該盡可能避免使用多重繼承,因為可能會讓**變得混亂
#接著上面**繼續
class student(artist, monk):
"""學生"""
def __init__(self, stuid, name, nationality):
self.id = stuid
super().__init__(name, nationality)#因為從寫了初始化方法id屬
性,別的屬性直接繫結父類屬性即可。
def study(self, course_name):
print(f'正在學習')
student = student(1001,'王大錘','湖南長沙')
student.study('python程式開發') #輸出為:王大錘正在學習python程式開發
student.eat()#輸出為:王大錘正在吃飯
student.chant()#輸出為:王大錘正在念經
另外在介紹乙個mro(方法解析順序)
python的mro即method resolution order(方法解析順序),也就是在python中的類的繼承順序是怎樣的。在python2.3之前,mro的實現是基於dfs的,而在python2.3以後mro的實現是基於c3演算法(我這裡兩種演算法的具體實現都不詳述)。c3演算法最早被提出是用於lisp的,應用在python中是為了解決原來基於深度優先搜尋演算法不滿足本地優先順序,和單調性的問題。本地優先順序:指宣告時父類的順序,比如c(a,b),如果訪問c類物件屬性時,應該根據宣告順序,優先查詢a類,然後再查詢b類。單調性:如果在c的解析順序中,a排在b的前面,那麼在c的所有子類裡,也必須滿足這個順序。
總的來說,乙個類的 mro 列表就是合併所有父類的 mro 列表,並遵循以下三條原則:
子類永遠在父類前面
如果有多個父類,會根據它們在列表中的順序被檢查
如果對下乙個類存在兩個合法的選擇,選擇第乙個父類
class a(object):
pass
class b(a):
pass
class c(b):
pass
print(c.mro())
'''繼承解析順序
輸出為:
[, ,
, ]'''
python物件導向學習 python物件導向學習
物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。物件導向三個概念 1.封裝 即把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法讓可信的類進...
python物件導向學習
1.物件 物件是資料和功能 函式 的集合體 2.類 類是具有共同屬性 資料 函式 的物件的總稱 注 先定義類後例項化物件 3.屬性訪問 可以通過 dict 訪問屬性的值 4.屬性查詢和方法繫結 物件的命名空間裡只存放著物件獨有的屬性,而物件們相似的屬性是存放於類中的。物件在訪問屬性時,會優先從物件本...
python學習 物件導向程式設計
物件導向程式設計 object oriented programming,簡稱oop,是一種程式設計思想。oop把物件作為程式的基本單元,乙個物件包含了資料和運算元據的函式。面向過程的程式設計把電腦程式視為一系列的命令集合,即一組函式的順序執行。為了簡化程式設計,面向過程把函式繼續切分為子函式,即把...