zoukankan      html  css  js  c++  java
  • 继承与派生知识点

    派生与继承

    继承(组合)

    继承指的是新建类的方法,新建的类称之为子类或者派生类

    子类继承的类叫做父类,也称之为基类或者超类

    特征:(面试

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

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

    继承的目的:

    为了减少代码的冗余度

    继承实现的方法:

    1: 首先确定谁是子类,谁是父类

    2 在定义时,子类(父类),实现继承

    如何寻找继承关系:

    先抽象,再继承

    抽象:抽取相似的部分,称之为抽象

    继承的关系:对象是特征和技能的结合体;

    ​ 类是一系列对象相同特征和技能的结合体;

    ​ 继承是一系列类相同特征和技能的结合体。

    继承背景下,对象属性的查找顺序:

    1 对象查找顺序会先从对象的名称空间中查找

    2 对象里面没有,则再去类中

    3 若当前类是子类,并且类中没有对象需要找的属性,再去父类查找

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

    派生

    派生指的是子类继承父类的属性,并且派生出新的属性。

    子类派生出新的属性,若是与父类的属性相同,则以子类为准;

    继承是谁与谁的关系,指的是类与类的关系,子类与父类是从属关系。

    子类派生出新的属性并且重用父类的属性:

    父类:

    class OldboyPeople:
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    

    方式一:直接通过父类调用__ init __ ,把 __ init __当做普通函数调用,传入对象与继承的属性

    class OldboyTeacher(OldboyPeople):
        # 等级, 薪资
        def __init__(self, name, age, sex, level, sal):
            OldboyPeople.__init__(self, name, age, sex)
            self.level = level
            self.sal = sal
    
    
    class OldboyStudent(OldboyPeople):
        # 课程
        def __init__(self, name, age, sex, course):
            OldboyPeople.__init__(self, name, age, sex)
            self.course = course
    
        def choose_course(self):
            print(f'学生{self.name}选择课程{self.course}')
    

    方式二:super是一个特殊的类,在子类中调用super()会得到一个特殊的对象,通过“.”指向命名空间

    class OldboyTeacher(OldboyPeople):
        # 等级, 薪资
        def __init__(self, name, age, sex, level, sal):
            super().__init__(name, age, sex)
            self.level = level
            self.sal = sal
    
    
    class OldboyStudent(OldboyPeople):
        # 课程
        def __init__(self, name, age, sex, course):
            super().__init__(name, age, sex)
            self.course = course
    
        def choose_course(self):
            print(f'学生{self.name}选择课程{self.course}')
    

    新式类与经典类(面试):

    在Python2 中才有经典类与新式类的区分

    在Python3中,所有的类都是新式类

    新式类:

    继承object的类,称之为新式类

    Python3中,子类不继承自定义的类!他只默认继承object

    经典类:

    在Python2 中,凡是没有继承object的类,都是经典类

    “”“

    mro():属于object——》type的函数,用来查看当前类的继承顺序,再多继承的情况下:

    class C(A, B):
        # print('C...')
        # x = 1
        pass
    

    print(C.mro())

    ”“”

    钻石继承:(面试)

    钻石继承也称为菱形继承。

    再多继承的情况下形成的钻石继承(继承顺序):

    ​ 经典类:深度优先

    ​ 新式类:广度优先

  • 相关阅读:
    打造属于自己的谷歌Maps版博客公告【演示+源码】
    CentOS 更改默认启动顺序
    VC的控制台程序,如何获取输入参数和环境变量
    如何同时提供ANSI和UNICODE函数
    VC工程需要注意字符集问题
    升级firefox到最新版
    VC工程需要注意字符集问题
    如何同时提供ANSI和UNICODE函数
    使C++ Builder编译程度独立运行
    安装谷歌浏览器
  • 原文地址:https://www.cnblogs.com/justztz/p/11651469.html
Copyright © 2011-2022 走看看