美文网首页
子类继承父类函数

子类继承父类函数

作者: 山猪打不过家猪 | 来源:发表于2021-05-17 10:03 被阅读0次

    如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。
    子类不重写 init,实例化子类时,会自动调用父类定义的 init

    如果重写了init 时,实例化子类,就不会调用父类已经定义的 init,语法格式如下:

    class Father(object):
        def __init__(self, name):
            self.name=name
            print ( "name: %s" %( self.name) )
        def getName(self):
            return 'Father ' + self.name
     
    class Son(Father):
        def getName(self):
            return 'Son '+self.name
     
    if __name__=='__main__':
        son=Son('runoob')
        print ( son.getName() )
    

    1调用父类方法

    class Father():
        def __init__(self):
            self.a = 'aaa'
    
        def action(self):
            print('调用父类的方法')
    
    
    class Son(Father):
        pass
    
    
    son = Son()  # 子类Son 继承父类Father的所有属性和方法
    son.action()  # 调用父类方法
    print(son.a)
    

    2. 重写父类方法

    class Father():
        def __init__(self):
            self.a = 'aaa'
    
        def action(self):
            print('调用父类的方法',self.a)
    
    
    class Son(Father):
        def __init__(self):
            self.a = 'bbb'
    
        def action(self):
            print('子类重写父类的方法',self.a)
    
    
    son = Son()  # 子类Son继承父类Father的所有属性和方法
    son.action()  # 子类Son调用自身的action方法而不是父类的action方法
    print(son.a)
    >>>
    子类重写父类的方法 bbb
    bbb
    
    

    这里,子类Son已经重写了父类Father的action的方法,并且子类Son也有初始化,因此,子类会调用自身的action方法和属性。总结:如果子类没有重写父类的方法,当调用该方法的时候,会调用父类的方法,当子类重写了父类的方法,默认是调用自身的方法。

    另外,如果子类Son重写了父类Father的方法,如果想调用父类的action方法,可以利用super()

    #如果在重新父类方法后,调用父类的方法
    
    class Father():
        def __init__(self):
            self.a = 'aaa'
        def action(self):
            print('调用父类的方法',self.a)
    
    
    class Son(Father):
        def action(self):
            super().action()
    #
    son=Son()
    son.action()
    >>>
    调用父类的方法 aaa
    
    
    

    强制调用父类私有属性方法

    如果父类的方法是私有方法,如 def __action(self) 这样的话再去调用就提示没有这个方法,其实编译器是把这个方法的名字改成了 _Father__action(),如果强制调用,可以这样:

    class Father():
        def __action(self):  # 父类的私有方法
            print('调用父类的方法')
     
    class Son(Father):
        def action(self):
            super()._Father__action()
    son=Son()
    son.action()
    
    

    调用父类的init方法

    如果自己也定义了 init 方法,那么父类的属性是不能直接调用的,比如下面的代码就会报错

    class Father():
        def __init__(self):
            self.a=a
     
    class Son(Father):
        def __init__(self):
            pass
        
    son=Son()
    print(son.a)
    
    
    image.png

    修改方法:可以在 子类的 init中调用一下父类的 init 方法,这样就可以调用了

    class Father():
        def __init__(self):
            self.a='aaa'
     
    class Son(Father):
        def __init__(self):
            super().__init__()
            #也可以用 Father.__init__(self)  这里面的self一定要加上
    son=Son()
    print(son.a) 
    
    

    继承父类初始化过程中的参数

    class Car():
        def __init__(self):
            self.name = "car"
            self.style = "4 wheels"
    
    
    class flyCar(Car):
        def __init__(self):
            super().__init__()
            self.wing = "wings"
    
    
        def show_infomaitions(self):
            print("flyCar informations: NAME-{0},STYLE-{1},ADDITION-{2}".format(self.name,self.style,self.wing))
    
    fc =  flyCar()
    fc.show_infomaitions()
    >>>
    flyCar informations: NAME-car,STYLE-4 wheels,ADDITION-wings
    
    
    

    如果子类既想继承父类a,b的属性,但是又想加入自己的属性c,

    class Father():
        def __init__(self, a, b):
            self.a = a
            self.b = b
    
        def dev(self):
            return self.a - self.b
    
    
    # 调用父类初始化参数a,b并增加额外参数c
    class Son(Father):
        def __init__(self, a, b, c):  # 固定值: 例如默认c=10,也可以显式地将c赋值
            Father.__init__(self, a, b)
            self.c = c
    
        def add(self):
            return self.a + self.b
    
        def compare(self):
            if self.c > (self.a + self.b):
                return True
            else:
                return False
    
    
    son = Son(1, 2, 1)  # 显式地将c=1传入子类初始化函数
    print(son.dev())  # 调用父类dev函数
    print(son.add())  # 子类自身add函数
    print(son.compare())  # 子类自身compare函数
    
    

    继承的例子

    
    from selenium import webdriver
    
    class Booking(webdriver.Chrome):
        def __init__(self):
            super(Booking,self).__init__()
    
        def land_first_page(self):
            self.get("http://www.baidu.com")
    
    
    
    inst = Booking()
    inst.land_first_page()
    
    

    相关文章

      网友评论

          本文标题:子类继承父类函数

          本文链接:https://www.haomeiwen.com/subject/attcjltx.html