zoukankan      html  css  js  c++  java
  • 面向对象之继承

    什么是继承?

    专业角度: B 继承 A类, B就叫做A的子类,派生类,
    A叫做B的父类,基类,超类.
    B类以及B类的对象使用A类的所有的属性以及方法.
    字面意思: 继承就是继承父母所有的资产.  指向而已  自己空间并没有
    

    继承的优点

    节省代码.
    增强的耦合性.
    代码规范化.
    

    单继承

    1.子类对象执行父类的一切.
    2.实例化对象一定一定会执行三件事. 一定会执行__init__
    3.注意: 子类以及子类对象只能调用父类的属性以及方法,不能操作(增删改).
    4.子类将父类的方法覆盖了,(重写父类的方法) 调用就不找父类 类指针
    

    举例

    class A:
        pass
    class B(A):
        pass
    # B 子类,派生类
    # A 父类, 基类, 超类
    # 单继承: 使用.
    

    如何既要执行父类方法又要执行子类方法

    #         Animal.__init__(self, name, age, sex)
    #         # 方法二:
    #         # super(Person, self).__init__(name, age, sex)
    #         # super().__init__(name, age, sex)
    #         self.hobby = hobby
    

    多继承

    在python2x版本中存在两种类.:
      ⼀个叫经典类. 在python2.2之前. ⼀直使⽤的是经典类. 经典类在基类的根如果什么都不写.
      ⼀个叫新式类. 在python2.2之后出现了新式类. 新式类的特点是基类的根是object类。
    python3x版本中只有一种类:
    python3中使⽤的都是新式类. 如果基类谁都不继承. 那这个类会默认继承 object

    经典类的多继承

    虽然在python3中已经不存在经典类了. 但是经典类的MRO最好还是学⼀学. 这是⼀种树形结构遍历的⼀个最直接的案例. 在python的继承体系中. 我们可以把类与类继承关系化成⼀个树形结构的图. 来, 上代码:

    在经典类中采⽤的是深度优先,遍历方案. 什么是深度优先. 就是⼀条路走到头. 然后再回来. 继续找下⼀个.

    class A:
        pass
    class B(A):
        pass
    class C(A):
        pass
    class D(B, C):
        pass
    class E:
        pass
    class F(D, E):
        pass
    class G(F, D):
        pass
    class H:
        pass
    class Foo(H, G):
        pass
    

    img

    答案 类的MRO: Foo-> H -> G -> F -> E -> D -> B -> A -> C.

    新式类的多继承

    一般我们用 mro方法就行

    举例

    print(A.mro())
    
  • 相关阅读:
    Dart Learn Notes 04
    Dart Learn Notes 03
    Dart Learn Notes 02
    一介书生,仅此而已
    计算机技术的演进及编程语言的多样
    C#方法(用法,参数)
    C#数组--(Array类的属性和方法)
    C#数组--(一维数组,二维数组的声明,使用及遍历)
    程序设计的编程方法
    C#流程控制语句--跳转语句(break,continue,goto,return,)
  • 原文地址:https://www.cnblogs.com/saoqiang/p/12386579.html
Copyright © 2011-2022 走看看