• 继承


    1.什么是继承?
        继承是一种关系,必须存在两个对象才可能产生这种关系.
        被继承的一方称为父,继承的一方称为子
        在程序中,继承指的是类与类之间的关系
    2.为什么要使用继承?
        通过继承,子可以直接享受父提供的内容
        在程序中通过继承,子可以直接使用父提供的已有代码
    3.怎么使用继承?
            class Father:
                pass
            class Son(Father):
                pass
                在子类中,类名后面加上括号,括号内加上父类的名称即可,可以有多个父类,需要用多个父类的话需要在子类括号中以逗号分隔
        在python一个子类可以有多个父类,多个父类在括号中以逗号隔开,其他语言不支持
        调用:可以使用父类中的属性,也可以使用父类中的函数
    4.继承与抽象
        先抽象后继承
        抽象是:抽取多个类相同的部分形成另一个类
        减少重复代码,继承到一些子类不需要的内容,所以需要抽取公共父类    
        在抽取过程中可能会产生与业务需求无关的类,这是正常的,即公共父类
        公共父类的作用是存储多个子类相同的属性和技能
    5.派生
        什么是派生? 子类继承某个父类并且拥有自己独特的属性或技能,这个类就称派生类
                    只要子类中出现了任何新内容,他就是一个派生类
    6.子类访问父类中的方法
        访问父类中的方法减少代码量
        super 或者指名道姓的调用  super一定是用在存在继承关系的子类中

     1 class Person:
     2     def __init__(self,name,age,sex):
     3         self.name = name
     4         self.age = age
     5         self.sex = sex
     6     def sayHI(self):
     7         print('hello my name is %s age is %s sex is %s'%(self.name,self.age,self.sex))
     8         
     9 class Student(Person):
    10     def __init__(self,name,age,sex,number)
    11         #在子类中重用父类方法的方式1,指名道姓的调用,与继承没有关系
    12         Person.__init__(self,name,age,sex)
    13         #super() 表示创建一个特殊对象,用来调用父类的方法 按照mro的列表顺序查找
    14         #在子类中重用父类方法的方式2
    15         #super().__init__(name,age,sex)
    16         #在python2中super的使用方法与python有所不同,需要传入当前类,当前对象
    17         #在python中 super(Student,self).__init__(name,age,sex)
    18         self.number = number
    19     
    20     def up_class(self):
    21         print('% 正在上课...'%self.name)
    22         
    23 stu1 = Student('alan',20,'man','9527')
    Super

    7.存在继承关系后的属性查找
        对象>>类>>父类>>父类的父类...
        优先找对象,如果对象没有则找类,如果类没有会沿着继承关系一直找到最顶层父类
        无论是属性还是方法查找对象是一样的
        一个子类继承多个父类:
            1.按照继承顺序从左到右  谁先继承先找谁
            2.深度优先,沿着一条路径找到最高层,如果不存在则换另外一条线
              这种查找方式仅仅在非菱形继承的情况下
            当存在共同父类时会产生菱形继承关系:::>>>先深度优先再广度优先

    8.经典类与新式类
        所有之间继承或间接继承object的类 都是新式类
        object 类称之为根类  所有类都是源自object
        为什么这么设计?
            例如:创建对象时,需要申请内存空间,创建新的名称空间,讲对象的属性放入到名称空间,这一些复杂的基础操作,都有object来完成,简单的说object提供了一些常用的基础操作
            在python3找那个默认所有类都是新式类
            在python2中默认是经典类(不会自动继承object)
            __bases__ 用于查看父类

            在经典类中,属性的查找按照深度优先,python2中才有经典类,python3中属性的查找顺序先深度后广度
    10.mro
        显示属性的查找顺序列表,属性的查找顺序就是按照该列表进行查找

      子类出现了与父类重复的名字 称之为覆盖
      子类出现了与父类不同的名字 称之为拍派生

    学习,学习,学习! 学习是为了更好的未来,不要让别人瞧不起你,加油!!!
  • 相关阅读:
    第06组 Alpha冲刺(4/6)
    第06组 Alpha冲刺(3/6)
    第06组 Alpha冲刺(2/6)
    第06组 Alpha冲刺(1/6)
    第06组 团队Git现场编程实战
    团队项目-需求分析报告
    团队项目-选题报告
    洛谷3195 玩具装箱(dp,斜率优化)
    CF 1334(edu85) F. Strange Function(线段树,dp)
    CF1325E. Ehab's REAL Number Theory Problem(最小环)
  • 原文地址:https://www.cnblogs.com/yangyufeng/p/10119447.html
Copyright © 2020-2023  润新知