1.父類中已經(jīng)有init模塊,子類繼承父類后,無需再初始化(init),實例化子類時,會自動調(diào)用父類定義的init【父親蓋了一樓,兒子想造房子就不需要再蓋一樓了】
2.父類中已經(jīng)有init模塊,子類繼承父類后需要擴展父類行為,需要子類重寫init,子類重寫init,實例化子類,就不會調(diào)用父類已經(jīng)定義的init【父親蓋了一樓,兒子想造二樓,需要先繼承一樓再建二樓-->重寫】
重寫init,要顯示調(diào)用父類的init方法,有以下兩種調(diào)用方式:案例帶有初始化參數(shù)的父類
- 調(diào)用未綁定的父類構(gòu)造方法
Base 父類初始化帶有driver參數(shù)
class Base(object):
def __init__(self, driver):
self.driver = driver
def find(self, *loc):
try:
t = WebDriverWait(self.driver, 10).until(
lambda x: x.find_element(*loc))
return t
except:
print("%s 頁面中不能找到 %s 元素" %self, loc)
class Fin_plus(Base): # 子類繼承父類Base
def __init__(self, driver):
# 必須顯式調(diào)用父類的構(gòu)造方法,否則不會執(zhí)行父類構(gòu)造方法
Base.__init__(self, driver)
- super繼承:使用super需要繼承object對象,屬于新式類。super函數(shù)會返回一個super對象 ,這個對象負(fù)責(zé)進行方法解析,解析過程中會自動查找所有父類以及父類的父類。
優(yōu)勢:如果子類繼承了多個父類,它只需要使用一次super函數(shù)就可以。
Base 父類初始化帶有driver參數(shù)(與上述案例一致)
class Fin_plus(Base):
def __init__(self, driver, loc): # 子類中擴展了loc參數(shù)
super(Base, self).__init__(driver) # 使用super函數(shù)調(diào)用父類的構(gòu)造方法
self.loc = loc # 定義loc參數(shù)
def fin_plus(self):
self.find(self.loc) # find是Base 父類定義的一個方法
擴展后,這里調(diào)用子類Fin_plus,子類實例化時,需要傳 driver, loc兩個參數(shù)