• 继承与派生


    继承:
    (夺命三问)
    1.什么是继承?
    继承指的是新建类的方法, 新建的类称之为子类或者派生类,
    子类继承的类叫做父类,也称之为基类或超类.

    继承的特征:
    子类可以继承父类的属性(特征与技能), 并且可以派生出自己的属性(特征与技能).

    注意: 在python中,一个子类可以继承多个父类,其他语言只能一个子类继承一个父类.

    2.为什么要继承?
    继承的目的是为了减少代码冗余(减少重复代码).

    3.如何实现继承?
    1.首先要确定好谁是子类,谁是父类.
    2.在定义类时, 子类 + (), ()内写父类,实现继承.

    class 父:
            xxx = 111
            pass
    
    class 子(父):
            pass    
    # 父类
    class ParentClass1:
        pass
    
    
    class ParentClass2:
        pass
    
    
    # 子类
    class SubClass1(ParentClass1):
        pass
    
    
    # 继承多个父类
    class SubClass2(ParentClass1, ParentClass2):
        pass
    
    
    # 查看继承的父类: __bases__,是类的属性,用来查找当前类的父类.
    print(SubClass1.__bases__)  # (<class '__main__.ParentClass1'>,)
    print(SubClass2.__bases__)  # (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
    
    

    '''
    如何寻找继承关系:
    要想寻找继承关系,首先要 "先抽象,再继承".

    什么是抽象?
    抽象指的是抽取相似的部分,称之为抽象.

    • 先抽象(抽象思想):
      奥巴马 ---> 人类 ---> 动物类
      麦兜 ---> 猪类 ---> 动物类
      小丁丁 ---> 狗类 ---> 动物类

      抽象定义动物类,称之为父类.
      特征:
      眼睛,鼻子...
      技能:
      吃,喝,撒...

    • 再继承(在程序中):
      奥马巴对象 ---> 调用人类 ---> 继承动物类
      麦兜对象 ---> 调用猪类 ---> 继承动物类
      小丁丁对象 ---> 调用狗类 ---> 继承动物类

    继承的关系:
    对象是特征与技能的结合体.
    类是一系列对象相同的特征与技能的结合体.
    继承是一系列类相同的特征与技能的结合体.
    '''

    '''
    在继承背景下,对象属性的查找顺序:
    1.对象查找属性会先从对象的名称空间中查找.
    2.若对象没有,则会去类里面找.
    3.若当前类是子类,并且没有对象找的属性,会去父类中查找

    注意: 对象查找属性,若子类有,不管父类有没有,以子类的为准.
    

    '''

    '''
    什么是派生?
    派生指的是子类继承父类的属性,并且派生出新的属性.(*****)

    子类派生出新的属性,若与父类的属性相同,则以子类的为准.
    继承是谁与谁的关系, 指的是类与类的关系,子类与父类是从属关系.
    

    '''

    '''
    新式类与经典类(了解):
    在python2中,才会有新式类与经典类之分.
    在python3中,所有的类都是新式类.

    新式类:
        继承object的类都称之为新式类.
        python3中,子类不继承自定义的类,默认继承object.
    
    经典类:
        在python2中,凡是没有继承object的类都是经典类.
    

    '''

    '''
    钻石继承也可以称之为菱形继承.

    - 在多继承的情况下形成的钻石继承 (继承顺序)
    
        - 经典类:
            深度优先:
    
        - 新式类:
            广度优先:
    

    '''

  • 相关阅读:
    [LeetCode]Contains Duplicate
    C++基础之泛型算法
    KMP算法
    [LeetCode]Shortest Palindrome
    [LeetCode]House Robber
    Palindrome Linked List leetcode
    Rotate Array leetcode
    Rotate Image LeetCode
    Rotate List leetcode
    Reorder List leetcode
  • 原文地址:https://www.cnblogs.com/jinhongquan/p/11650712.html
Copyright © 2020-2023  润新知