python_理解篇_理解类继承

2019-11-12  本文已影响0人  金鱼座

大家好,我是金鱼座,一个走在测试领域这片蓝海中, 蹉跎前行的技术渣渣,唯有一直走下去,也许能改变点什么,加油!

类继承可以说是所有面向对象语言的一个最重要组成部分,python当然不可能缺少这样的重要内容

那么为什么我会将类继承单独拿出来说呢, 主要是给自己再一次加深理解,作为一个职业非主力开发的测试来说,我们很多时候对于语言的理解都是浮于表面,只要稍微进行一些变种,就会一头雾水,我也希望跟我有一样感觉的人,能够通过我写的这个加深理解

先说下对于普通的一个类定义是这样的:

class A():
    def __init__(self, a):
        self.a = a
   pass

再说下我遇到的几种情况
1. 继承父类时, 子类没有init初始化

class C(A):
    pass

此时声明一个C = C()时,会报错

image.png

原因是继承A后, A初始化有个a参数, 此时需要定义c = C(3)

结论:子类不重写 init,实例化子类时,会自动调用父类定义的 init

2. 继承父类时, 子类有自己独立的初始化init

class B(A):
    def __init__(self, b):
        self.b = b
    pass

此时声明:b = B(2)时, 2会自动赋值给b,可以通过b.b来进行输出

注意:此时如果引用b.a 时会报错 image.png

子类不需要自动调用父类的方法:子类重写init()方法,实例化子类后,将不会自动调用父类的init()的方法。

3. 继承父类时,需要继承父类的初始化init也有自己的init

class B(A):
    def __init__(self, b):
         A.__init__(self, 2)
        super(B, self).__init__(2)
        self.b = b
    pass

上述的两种super和A的链式引用都可以
此时声明:b = B(1)时, b.b = 1, b.a = 2

结论 如果重写了init 时,要继承父类的构造方法,可以使用 super(子类,self).init(参数1,参数2,....), 或者 父类名称.init(self,参数1,参数2,...)

通过上面的三种情况, 我们可以看出, python的继承并不能直接引用父类的初始化参数,必须通过一定的处理,才能做到成功引用

上一篇下一篇

猜你喜欢

热点阅读