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


原文地址:https://www.cnblogs.com/baxiaobin/p/13402989.html