python带driver参数的继承和重写init方法

1.父类中已经有init模块,子类继承父类后,无需再初始化(init),实例化子类时,会自动调用父类定义的init【父亲盖了一楼,儿子想造房子就不需要再盖一楼了】

2.父类中已经有init模块,子类继承父类后需要扩展父类行为,需要子类重写init,子类重写init,实例化子类,就不会调用父类已经定义的init【父亲盖了一楼,儿子想造二楼,需要先继承一楼再建二楼-->重写】

重写init,要显示调用父类的init方法,有以下两种调用方式:案例带有初始化参数的父类

  1. 调用未绑定的父类构造方法

Base 父类初始化带有driver参数

class Base(object):

  def __init__(self, driver):
        self.driver = driver

  def find(self, *loc):
        try:
             t = WebDriverWait(self.driver, 10).until(
                 lambda x: x.find_element(*loc))
             return t
        except:
             print("%s 页面中不能找到 %s 元素" %self, loc)

class Fin_plus(Base):  # 子类继承父类Base

  def __init__(self, driver):
        # 必须显式调用父类的构造方法,否则不会执行父类构造方法
        Base.__init__(self, driver)  
  1. super继承:使用super需要继承object对象,属于新式类。super函数会返回一个super对象 ,这个对象负责进行方法解析,解析过程中会自动查找所有父类以及父类的父类。

优势:如果子类继承了多个父类,它只需要使用一次super函数就可以。

Base 父类初始化带有driver参数(与上述案例一致)

class Fin_plus(Base):  

   def __init__(self, driver, loc):  # 子类中扩展了loc参数

         super(Base, self).__init__(driver)  # 使用super函数调用父类的构造方法

          self.loc = loc  # 定义loc参数

    def fin_plus(self):

          self.find(self.loc)  # find是Base 父类定义的一个方法

扩展后,这里调用子类Fin_plus,子类实例化时,需要传 driver, loc两个参数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。