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方法中。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM