標籤:python、繼承
物件導向中一個重要的特性就是繼承,繼承的好處就是提高代碼的重用率,減少不必要的代碼。繼承是父類與子類的關係,當子類繼承了父類後,就具有了父類的所有變數和方法。在python中定義繼承的文法是:class 衍生類別名(基類名)。在使用python的繼承時需要注意一下幾點:
(1)當父類定義了__init__()初始化方法時,子類不會自動調用,而需要我們顯示調用,如果我們要擴充父類的變數,可以在__init__()添加參數。
(2)在調用基類的方法時,需要加上基類的類名首碼,且需要帶上self參數變數。
(3)Python總是首先尋找對應類型的方法,如果它不能在衍生類別中找到對應的方法,它才開始到基類中逐個尋找。
舉例說明
父類
#BaseModleclass BaseClass: def __init__(self,name,age): self.name=name self.age=age print ("baseclass is inited") def speak(self,sth): print("Baseclass is speaking :%s"%sth);if (__name__==‘__main__‘): print("run by myself") BaseClass()else : print("i am import module")
‘‘‘
python中的__name__屬性:它表示當我們執行這個模組時,看它是否是使用者獨立執行的,還是通過import匯入後執行的,例如在這個例子中,我們執行派生模組SubModule,BaseModulde是匯入的模組,因此輸出了i am import module。
每個Python模組都有它的__name__,如果它是‘__main__‘,這說明這個模組被使用者單獨運行,我們可以進行相應的恰當操作。
‘‘‘
衍生類別
#SubModuleimport BaseModuleclass SubClass(BaseModule.BaseClass):#需要加上模組名,否則出錯 def __init__(self,name,age,salary): BaseModule.BaseClass.__init__(self,name,age)#顯示調用父類的初始化函數,並擴充變數 self.salary=salary print("subClass is inited") def talk(self ,sth): print("%s is talking %s"%(self.name,sth)) BaseModule.BaseClass.speak(self,sth)#調用父類方法時需要指明模組名.父類名if(__name__=="__main__"): print("run by myself") s=SubClass("yping",25,1000) s.talk("a story")
運行結果
>>> i am import modulerun by myselfbaseclass is initedsubClass is initedyping is talking a storyBaseclass is speaking :a story>>>
結果分析:
這裡首先輸出“i am import module”,說明程式是先從(__name__="__main__")判斷開始,首先執行父類的(__name__="__main__")判斷,由於現在不是直接執行BaseModule模組,因此輸出“i am import module”,接著執行子類的入口函數,執行個體化了一個SubClass類,首先父類初始化,然後衍生類別初始化,接著執行talk()函數,再調用父類speak()函數。