派生類(lèi)的定義如下所示:
classDerivedClassName(BaseClassName):
命名BaseClassName(示例中的基類(lèi)名)必須與派生類(lèi)定義在一個(gè)作用域內(nèi)。除了類(lèi),還可以用表達(dá)式,基類(lèi)定義在另一個(gè)模塊中時(shí)這一點(diǎn)非常有用:
classDerivedClassName(modname.BaseClassName):
派生類(lèi)的實(shí)例化沒(méi)有什么特殊之處:DerivedClassName()(示列中的派生類(lèi))創(chuàng)建一個(gè)新的類(lèi)實(shí)例。方法引用按如下規(guī)則解析:搜索對(duì)應(yīng)的類(lèi)屬性,必要時(shí)沿基類(lèi)鏈逐級(jí)搜索,如果找到了函數(shù)對(duì)象這個(gè)方法引用就是合法的。派生類(lèi)可能會(huì)覆蓋其基類(lèi)的方法。因?yàn)榉椒ㄕ{(diào)用同一個(gè)對(duì)象中的其它方法時(shí)沒(méi)有特權(quán),基類(lèi)的方法調(diào)用同一個(gè)基類(lèi)的方法時(shí),可能實(shí)際上最終調(diào)用了派生類(lèi)中的覆蓋方法。派生類(lèi)中的覆蓋方法可能是想要擴(kuò)充而不是簡(jiǎn)單的替代基類(lèi)中的重名方法。有一個(gè)簡(jiǎn)單的方法可以直接調(diào)用基類(lèi)方法,只要調(diào)用:BaseClassName.methodname(self,arguments)。
Python有兩個(gè)用于繼承的函數(shù):
函數(shù)isinstance()用于檢查實(shí)例類(lèi)型:isinstance(obj,int)只有在obj.__class__是int或其它從int繼承的類(lèi)型
函數(shù)issubclass()用于檢查類(lèi)繼承:issubclass(bool,int)為T(mén)rue,因?yàn)閎ool是int的子類(lèi)。但是,issubclass(unicode,str)是False,因?yàn)閡nicode不是str的子類(lèi)(它們只是共享一個(gè)通用祖先類(lèi)basestring)。
以上內(nèi)容為大家介紹了python的繼承,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。