標籤:python3 深度 背景 font __init__ people pre 函數 str
繼承
1.什麼是繼承?
在程式中繼承是一種建立子類的方式 新建立的類稱之為之類\衍生類別 被繼承的類稱之為父類\基類\超類
2.為何要用繼承?
減少類與類之間代碼冗餘的問題
3.如何繼承?
先抽象再繼承
python中繼承的特點分為單繼承和多繼承
class Parent: passclass Parent2: pass class Sub1(Parent): pass #單繼承class Sub2(Parent,Parent2): pass #多繼承
python2和python3在繼承上的區別
新式類:但凡繼承object類的子類,以及該子類的子子類....都稱為新式類
經典類:沒有繼承object類的子類,以及該子類的子子類....都稱為經典類
只有python2中才區分新式類與經典類
派生
在子類派生出的新功能中如何重用父類的功能:
方式一:指名道姓地訪問某一個類中的函數 與繼承無關
class People: def __init__(self,name,age): self.name=name self.age = ageclass Student(People): def __init__(self,name,age,num): People.__init__(self,name,age) self.num = num
方式二:super 在python3中super不傳參數,調用該函數會得到一個特殊的對象,該對象是專門用來訪問父類中的屬性的
強調:super會嚴格參照類的mro列表依次尋找屬性
class People: def __init__(self,age,name): self.age=age self.name=name class Teacher(People): def __init__(self,age,name,salary): super(Teacher,self).__init__(age,name) self.salary = salary
屬性的尋找:
1.在單繼承背景中,無論是新式類還是經典類屬性尋找順序都一樣
先obj->類->父類......
2.在多繼承背景下,如果一個子類繼承了多個分支,但是多個分支沒有匯聚到一個非object類,無論是新式類還是經典類屬性尋找順序都一樣
會按照從左至右的順序一個分支一個分支的尋找下去
3.在多繼承背景下,如果一個子類繼承了多個分支,但是多個分支最終匯聚到一個非object類
新式類:廣度優先尋找
經典類:深度優先尋找
繼承與派生