Python多繼承時子類如何調(diào)用指定父類
Python多繼承時子類調(diào)用指定父類
在Python中,如果一個子類繼承自多個父類,并且這些父類都有相同名稱的方法,你可以使用父類名直接調(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 類同時繼承了 Parent1 和 Parent2。
如果你需要在 Child 的實例方法中調(diào)用 Parent1 的 my_method,你可以直接使用 Parent1.my_method(self) 來調(diào)用。
這里的 self 是用來指向子類實例的,確保方法可以訪問到實例的屬性。
Python子類繼承父類構(gòu)造函數(shù)說明
(1) 如果在子類中需要的構(gòu)造方法就需要顯示的調(diào)用父類的構(gòu)造方法,或者不重寫父類的構(gòu)造方法。
子類不重寫__init__,實例化子類時,會自動調(diào)用父類定義的__init__。
實例:
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)會自動調(diào)用父類定義的__init__,因此會出現(xiàn)一行:age: 18
(2)如果重寫了__init__ 時,實例化子類,就不會調(diào)用父類已經(jīng)定義的 __init__
實例
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__ 方法,則會調(diào)用自身的初始化方法,因此不會出現(xiàn)上面實例中那樣的:age: 18
(3)如果重寫了__init__時,要繼承父類的構(gòu)造方法,可以使用super關(guān)鍵字:
super(子類,self).__init__(參數(shù)1,參數(shù)2,....)
或者另一種經(jīng)典的方法:
父類名稱.__init__(self,參數(shù)1,參數(shù)2,...)
實例:
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
可以看到,會出現(xiàn)父類中的初始化輸出結(jié)果: name: 18,也會出現(xiàn)子類初始化中輸出結(jié)果:hello world
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法
今天小編就為大家分享一篇在Python中關(guān)于使用os模塊遍歷目錄的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進(jìn)行文本匹配操作
這篇文章主要介紹了Python cookbook(字符串與文本)在字符串的開頭或結(jié)尾處進(jìn)行文本匹配操作,涉及Python使用str.startswith()和str.endswith()方法針對字符串開始或結(jié)尾處特定文本匹配操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-04-04
python執(zhí)行shell并獲取結(jié)果的詳細(xì)示例
在Python中執(zhí)行Shell命令并獲取其結(jié)果,通常可以使用subprocess模塊,這個模塊允許我們啟動新的進(jìn)程,連接到它們的輸入/輸出/錯誤管道,并獲取它們的返回碼,下面是一個詳細(xì)的示例,展示了如何使用subprocess.run()函數(shù)來執(zhí)行Shell命令并獲取其輸出,需要的朋友可以參考下2024-07-07
深入解析python中的實例方法、類方法和靜態(tài)方法
這篇文章主要介紹了python中的實例方法、類方法和靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

