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

子类继承父类函数

作者: 山猪打不过家猪 | 来源:发表于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()

相关文章

  • c++应用笔记

    类的继承:继承的使用使用public可以继承父类的所有public成员 子类执行父类的构造函数只要在子类的构造函数...

  • 面向对象继承的方式

    创建父类 原型链继承:将父类的实例作为子类的原型 借用构造函数继承:在子类型构造函数的内部调用父类的构造函数 组合...

  • 关于构造函数

    父类有参构造函数的作用 子类不能继承父类的构造函数 子类继承父类后,如果想要初始化,必须保证父类已经被构造,此时就...

  • java中继承,子类是否继承父类的构造函数

    java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显...

  • 继承

    1. 构造函数继承 重点:用.call()和.apply()将父类构造函数引入子类函数(在子类函数中做了父类函数的...

  • java子类调用父类构造器函数

    子类 调用 父类的构造函数:(构造函数不会被继承,只是被子类调用而已) 1、子类所有的 构造函数 默认调用父类的无...

  • C++基础继承(is-A)

    继承特点   子类拥有父类的所有属性和方法(除了构造函数和析构函数)。  子类可以拥有父类没有的属性和方法。 继承...

  • 【第 11 天】继承 与 多态

    继承 与 多态 继承 子类继承父类,子类的实例即是子类的类型也是父类的类型。判断是否为某个类型(的实例)可以用函数...

  • Flutter中extends、implements、mixin

    extends是继承可以继承父类的特性。 Dart中继承是单继承. 构造函数或者析构函数不能继承. 子类重写父类方...

  • C++中的多重继承

    多重继承 C++支持编写多重继承的代码一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承所有父类的成员函数...

网友评论

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

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