1. 程式人生 > 實用技巧 >python學習筆記2--子類父類繼承時的引數傳遞

python學習筆記2--子類父類繼承時的引數傳遞

記錄一下一個真例項子吧,在寫自動化測試框架時,聲明瞭一個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方法中。