python學習筆記2--子類父類繼承時的引數傳遞
阿新 • • 發佈:2020-07-30
記錄一下一個真例項子吧,在寫自動化測試框架時,聲明瞭一個webpage類作為selenium基類,存放一些常用的頁面方法。
然後聲明瞭一個登入類(基類),登入類繼承自基類。
首先webpage是這麼寫的
class WebPage(object): """selenium基類"""
def __init__(self, driver):
# self.driver = webdriver.Chrome()
self.driver = driver
self.timeout = 20 # 查詢元素的超時時間
self.wait = WebDriverWait(self.driver, self.timeout)
def input_text(self, locator, txt):
"""輸入(輸入前先清空)"""
sleep(0.5)
ele = self.find_one_element(locator)
ele.clear()
ele.send_keys(txt)
log.info("輸入文字:{}".format(txt))
如上,基類需要傳入一個driver的引數,一般來說的都是傳入一個谷歌 的driver,同事基類還實現了一個輸入文字的方法
子類登入類程式碼如下
class Login(WebPage):
"""登入類"""
def input_loginName(self, content):
"""輸入使用者名稱"""
self.input_text(search['賬號'], txt=content)
sleep()
def input_loginPassword(self, content):
"""輸入密碼"""
self.input_text(search['密碼'], txt=content)
sleep()
登入類繼承自基類,並且定義了兩個方法輸入使用者名稱和密碼,其中實現過程用到了基類的方法輸入文字。
我們去例項化一個登入類的時候,要怎麼做傳參呢?細細想想,是用的 Login(webdriver.Chrome())的方式去例項化,為什麼需要傳入引數,是因為雖然login類不需要引數,但是他爸爸需要一個引數driver,所以例項化的時候也是需要穿進去的。
那麼我就思考了一下,如果父類有要傳的引數,子類也有要傳的引數,例項化子類的時候需要怎麼例項呢,查閱資料發現
需要用到
super(子類, self).__init__(父類引數
的方式進行傳參,
具體用法如下,假設有動物類和狗類,各有一個引數
class Animal(object):
def __init__(self, lx):
self.driver = lx
def set_run(self):
print(self.driver)
class dog(Animal):
def __init__(self, xw, lx):
super(dog, self).__init__(lx)
self.xe = xw
def set_r(self):
self.set_run()
c = dog('pao1', 'zou1')
c.set_r()
則如上實現例項化,pao1 傳參將賦值給dog類的xe變數,而zou1 將賦值給 父類的driver變數,由於子類可以使用父類的方法,則最後呼叫結果為 zou1
不難看出,如果需要在子類中呼叫init方法在例項化時給子類賦值,則必須呼叫
super(子類, self).__init__(父類引數)
寫在子類的init方法中。