Python多繼承時(shí)子類如何調(diào)用指定父類
Python多繼承時(shí)子類調(diào)用指定父類
在Python中,如果一個(gè)子類繼承自多個(gè)父類,并且這些父類都有相同名稱的方法,你可以使用父類名直接調(diào)用指定父類的方法。
# -*- coding: utf-8 -*- class Parent1: def my_method(self): print("Parent1's my_method") class Parent2: def my_method(self): print("Parent2's my_method") class Child(Parent1, Parent2): def call_parent1_method(self): Parent1.my_method(self) if __name__ == '__main__': c = Child() c.call_parent1_method() # 輸出: Parent1's my_method
在上面的例子中,Child 類同時(shí)繼承了 Parent1 和 Parent2。
如果你需要在 Child 的實(shí)例方法中調(diào)用 Parent1 的 my_method,你可以直接使用 Parent1.my_method(self) 來調(diào)用。
這里的 self 是用來指向子類實(shí)例的,確保方法可以訪問到實(shí)例的屬性。
Python子類繼承父類構(gòu)造函數(shù)說明
(1) 如果在子類中需要的構(gòu)造方法就需要顯示的調(diào)用父類的構(gòu)造方法,或者不重寫父類的構(gòu)造方法。
子類不重寫__init__,實(shí)例化子類時(shí),會(huì)自動(dòng)調(diào)用父類定義的__init__。
實(shí)例:
class Father(object): def __init__(self, age): self.age=age print ( "age: %d" %( self.age) ) def getAge(self): print('父類的返回結(jié)果') return self.age class Son(Father): def getAge(self): print('子類的返回結(jié)果:') return self.age if __name__=='__main__': son=Son(18) print ( son.getAge() )
輸出結(jié)果:
age: 18
子類的返回結(jié)果:
18
子類沒有初始化__init__ 方法,所以默認(rèn)會(huì)自動(dòng)調(diào)用父類定義的__init__,因此會(huì)出現(xiàn)一行:age: 18
(2)如果重寫了__init__ 時(shí),實(shí)例化子類,就不會(huì)調(diào)用父類已經(jīng)定義的 __init__
實(shí)例
class Father(object): def __init__(self, age): self.age=age print ( "age: %d" %( self.age) ) def getAge(self): return self.age class Son(Father): def __init__(self, age): print ( "hello world" ) self.age = age def getAge(self): return self.age if __name__=='__main__': son=Son(18) print (son.getAge() )
輸出結(jié)果:
hello world
18
子類有初始化__init__ 方法,則會(huì)調(diào)用自身的初始化方法,因此不會(huì)出現(xiàn)上面實(shí)例中那樣的:age: 18
(3)如果重寫了__init__時(shí),要繼承父類的構(gòu)造方法,可以使用super關(guān)鍵字:
super(子類,self).__init__(參數(shù)1,參數(shù)2,....)
或者另一種經(jīng)典的方法:
父類名稱.__init__(self,參數(shù)1,參數(shù)2,...)
實(shí)例:
class Father(object): def __init__(self, age): self.age=age print ( "name: %s" %( self.age)) def getage(self): return self.age class Son(Father): def __init__(self, age): # super(Son, self).__init__(age) # 1:super方法 Father.__init__(self,age) # 2: 經(jīng)典方法 print ("hello world") self.age = age def getage(self): return self.age if __name__=='__main__': son=Son(18) print ( son.getage() )
輸出結(jié)果:
name: 18
hello world
18
可以看到,會(huì)出現(xiàn)父類中的初始化輸出結(jié)果: name: 18,也會(huì)出現(xiàn)子類初始化中輸出結(jié)果:hello world
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談python為什么不需要三目運(yùn)算符和switch
下面小編就為大家?guī)硪黄獪\談python為什么不需要三目運(yùn)算符和switch。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06python實(shí)現(xiàn)不同電腦之間視頻傳輸功能
這篇文章主要介紹了python實(shí)現(xiàn)不同電腦之間視頻傳輸,本文視頻傳輸實(shí)現(xiàn)的前提是確保發(fā)送端和接收端接在同一個(gè)局域網(wǎng)下,分為發(fā)送端和接收端,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06python3讀取autocad圖形文件.py實(shí)例
這篇文章主要介紹了python3讀取autocad圖形文件.py實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06在Python中關(guān)于使用os模塊遍歷目錄的實(shí)現(xiàn)方法
今天小編就為大家分享一篇在Python中關(guān)于使用os模塊遍歷目錄的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進(jìn)行文本匹配操作
這篇文章主要介紹了Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進(jìn)行文本匹配操作,涉及Python使用str.startswith()和str.endswith()方法針對字符串開始或結(jié)尾處特定文本匹配操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04python執(zhí)行shell并獲取結(jié)果的詳細(xì)示例
在Python中執(zhí)行Shell命令并獲取其結(jié)果,通??梢允褂胹ubprocess模塊,這個(gè)模塊允許我們啟動(dòng)新的進(jìn)程,連接到它們的輸入/輸出/錯(cuò)誤管道,并獲取它們的返回碼,下面是一個(gè)詳細(xì)的示例,展示了如何使用subprocess.run()函數(shù)來執(zhí)行Shell命令并獲取其輸出,需要的朋友可以參考下2024-07-07深入解析python中的實(shí)例方法、類方法和靜態(tài)方法
這篇文章主要介紹了python中的實(shí)例方法、類方法和靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03