物件導向之繼承
繼承是一種建立新類的方式,新建的類可以繼承一個或多個父類(python支援多繼承),父類又可稱
為基類或超類,新建的類稱為派生類或子類。
子類會“”遺傳”父類的屬性,從而解決程式碼重用問題。
單繼承與多繼承
class Par1: pass class Par2: pass class ch1(Par1):#單繼承 pass class ch2(Par1,Par2):#多繼承 pass
派生中方法呼叫的規則
子類也可以新增自己新的屬性或者在自己這裡重新定義這些屬性(不會影響到父類),需要注意的是,一旦重新定義了自己的屬性且與父類重名,那麼呼叫新增的屬性時,就以自己為準了。
但在多繼承中情況就會稍微有點複雜,因為如果兩個父類中有相同名字的方法的話,子類會呼叫哪一個?
試驗:
class Par1(): def f1(self): print(`this is par1.f1`) class Par2(): def f1(self): print(`this is par2.f1`) class ch2(Par1,Par2): pass obj = ch2() obj.f1() #輸出:this is par1.f1
class Par1(): def f2(self): print(`this is par1.f1`) class Par2(): def f1(self): print(`this is par2.f1`) class ch2(Par1,Par2): pass obj = ch2() obj.f1() #輸出:this is par2.f1
看來是優先在第一個父類中找,找不到再找下一個。
class Grandpar: def f1(self): print(`this is grandpar.f1`) class Par1(Grandpar): def f2(self): print(`this is par1.f1`) class Par2(Grandpar): def f1(self): print(`this is par2.f1`) class ch2(Par1,Par2): pass obj = ch2() obj.f1() #輸出:this is par2.f1
class Grandpar: def f1(self): print(`this is grandpar.f1`) class Par1(Grandpar): def f2(self): print(`this is par1.f1`) class Par2(Grandpar): def f2(self): print(`this is par2.f1`) class ch2(Par1,Par2): pass obj = ch2() obj.f1() #輸出:this is grandpar.f1
當父類還有父類的時候,會先在Par1,Par2中找,找不到再從他們的父類中找。
如果在子類中需要使用父類中已經被重寫的方法,則可以通過
類名.方法名()
的方法呼叫。