继承

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
    显示属性的查找顺序列表,属性的查找顺序就是按照该列表进行查找

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

转载于:https://www.cnblogs.com/yangyufeng/p/10119447.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值