zoukankan      html  css  js  c++  java
  • 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方法中。


  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/baxiaobin/p/13402989.html
Copyright © 2011-2022 走看看