美文网首页
python_理解篇_理解类继承

python_理解篇_理解类继承

作者: 金鱼座 | 来源:发表于2019-11-12 11:37 被阅读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的继承并不能直接引用父类的初始化参数,必须通过一定的处理,才能做到成功引用

    相关文章

      网友评论

          本文标题:python_理解篇_理解类继承

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