• 继承


    继承

    1.什么是继承?

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

    子类继承的类叫父类,也被称作基类或超类

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

    在python中,一个子类可以有多个父类,但是其他语言中一个子类只能继承一个父类

    2.为什么要继承

    继承的目的是为了减少重复的代码

    3.如何实现继承

    1.首先要确定好谁是子类,谁是父类

    2.在定义类的时候,在子类后面加括号,括号里写父类名即可实现继承

    class animal:
        def __init__(self,footnum):
            self.footnum=footnum
        def roar(self):
            print('awwwww!')
    class dog(animal):
        def __init__(self,name,age,footnum):
            self.name=name
            self.age=age
            animal.__init__(self,footnum)
        def roar(self):
            print('Bark!')
    class shiba_inu(dog):
        def __init__(self,name,age,footnum,eyes):
            dog.__init__(self,name,age,footnum)
            self.eyes_colour=eyes
    
    
    kono=shiba_inu('dio',3,4,'blue')
    print(kono.roar())
    print(kono.eyes_colour)
        
    

    查询顺序

    在内存查找数据时,会首先查询自己有没有,然后去查找子类有没有,再去查找父类,如果都没有就会报错

    寻找继承关系

    如何寻找继承关系:

    ​ 想要寻找继承关系,首先要“先抽象,再继承”

    那什么是抽象?

    ​ 抽象指的是抽取相似的部分

    -先抽象(抽象思想):

    ​ 奥巴马--》马类--》动物类

    ​ 麦兜--》猪类--》动物类

    ​ 史努比--》狗类--》动物类

    ​ 抽象定义的动物类,我们称之为父类

    ​ 拥有动物都有的特征和技能

    -再继承(在程序中):

    ​ 奥巴马--》调用马类--》继承动物类

    ​ 麦兜--》调用猪类--》继承动物类

    ​ 史努比--》调用狗类--》继承动物类

    继承的关系

    ​ 对象是特征与技能的结合体

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

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

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

    ​ 1.对象查找属性会先从对象的名称空间中查找

    ​ 2.若对象没有,则会去类里面查找

    ​ 3.若当前类是子类,并且没有对象找的属性,会去父类中查找

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

    class Foo:
        def f1(self):
            print('Foo.f1')
    
        def f2(self):
            print('Foo.f2')
            self.f1()
    
    class Soo(Foo):
        def f1(self):
            print('Soo.f1')#如果这一行被注释的话会输出第二种
    
    soo_obj=Soo()
    soo_obj.f2()
    
    '''第一种
    Foo.f2
    Soo.f1
    '''
    
    '''第二种
    Foo.f2
    Foo.f1
    '''
    
    

    如果子类继承父类的__init__毫无意义

    解决方案有两种,

    一种是直接通过父类.调用__init____init__当作普通函数使用,传入对象与继承的属性

    还有一种是 super

    钻石继承

    就是从你爸那边继承钻石矿

    钻石继承亦有两种 有**经典类**和**新式类**

    经典类优先深度

  • 相关阅读:
    MFC STATIC,Picture控件使用及无法添加变量的问题
    MFC listctrl NMCLICK消息 错误 无法从"NMHDR*"转换为"NMITEMACTIVATE"
    vs2008中将开始执行按钮(不调试按钮)添加至标准工具栏方法
    MFC 删除工具栏 默认对话框全屏 修改MFC标题栏的文字 删除菜单栏
    Visual Assist X设置
    MFC禁止窗口最大化按钮和禁止改变窗口大小
    MFC从头开始如何利用MFC分割窗口
    MFC CSplitterWnd窗口分割
    关于VS2008下提示microsoft incremental linker已停止工作的问题
    windows 下codeblocks查看容器值
  • 原文地址:https://www.cnblogs.com/jimGraymane/p/11650598.html
Copyright © 2020-2023  润新知