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) 來(lái)調(diào)用。
這里的 self 是用來(lái)指向子類實(shí)例的,確保方法可以訪問(wèn)到實(shí)例的屬性。
Python子類繼承父類構(gòu)造函數(shù)說(shuō)明
(1) 如果在子類中需要的構(gòu)造方法就需要顯示的調(diào)用父類的構(gòu)造方法,或者不重寫(xiě)父類的構(gòu)造方法。
子類不重寫(xiě)__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
子類沒(méi)有初始化__init__ 方法,所以默認(rèn)會(huì)自動(dòng)調(diào)用父類定義的__init__,因此會(huì)出現(xiàn)一行:age: 18
(2)如果重寫(xiě)了__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)如果重寫(xiě)了__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腳本檢測(cè)笑臉漏洞的問(wèn)題復(fù)現(xiàn)
Python腳本有效檢測(cè)vsftpd2.3.4版本中的笑臉漏洞,該漏洞存在于6200端口,允許任何人連接,輸入帶有特定表情符號(hào)的用戶名和任意密碼即可觸發(fā),本文介紹了環(huán)境搭建、漏洞掃描和利用過(guò)程,通過(guò)nc命令演示了漏洞復(fù)現(xiàn)步驟2024-10-10
python程序運(yùn)行添加命令行參數(shù)argparse模塊具體用法詳解
這篇文章主要給大家介紹了關(guān)于python程序運(yùn)行添加命令行參數(shù)argparse模塊具體用法的相關(guān)資料,argparse是Python內(nèi)置的一個(gè)用于命令項(xiàng)選項(xiàng)與參數(shù)解析的模塊,通過(guò)在程序中定義好我們需要的參數(shù),需要的朋友可以參考下2024-01-01
python中plot實(shí)現(xiàn)即時(shí)數(shù)據(jù)動(dòng)態(tài)顯示方法
這篇文章主要為大家詳細(xì)介紹了python中plot實(shí)現(xiàn)即時(shí)數(shù)據(jù)動(dòng)態(tài)顯示方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
python使用裝飾器和線程限制函數(shù)執(zhí)行時(shí)間的方法
這篇文章主要介紹了python使用裝飾器和線程限制函數(shù)執(zhí)行時(shí)間的方法,主要涉及timelimited函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
使用wxPython創(chuàng)建一個(gè)文件夾結(jié)構(gòu)生成器
這篇文章主要為大家詳細(xì)介紹了如何利用?wxPython?來(lái)創(chuàng)建一個(gè)文件夾結(jié)構(gòu)生成器,幫助大家自動(dòng)化地創(chuàng)建文件夾和文件結(jié)構(gòu),有需要的可以了解下2024-11-11

