OOP的三大特征(优势):
1.封装
2.继承
3.多态
继承:
继承是两个对象之间产生的一种关系
a继承b 则a是子类,b是父类
在OOP的程序中继承是描述类与类之间的一种关系
继承的好处:生活中你继承你爹的财产 就可以直接拥有这些财产
程序中 一个类a 继承另一个类b a可以直接使用b类中的属性
和方法
具体的说:继承极大程度的提高了代码的重用性
名词解释:a继承b a称之为子类(派生类) b称之为父类(基类)
注意:继承描述的是 什么和什么的关系
在使用继承时,要先分析 类与类之间的关系,不应该违反生活中的原则
抽象:
在使用继承时要先抽象 再继承
抽象是抽取一堆类共同拥有的内容 形成一个新的抽象概念(类 也称之为公共类)
这个过程称之为抽象
很多情况下 抽象得到的新的类型与业务是不相关的 仅仅是因为代码需要
属性的查找顺序:
在没有继承关系的时候:
对象 -》类
在有继承关系的时候:
对象 -》自身的类 -》父类 -》。。。。-》object
object:
object 是所有类的根类 所有类都直接或者间接的继承自object
在定义类的时候 如果没有手动继承任何类 默认继承object
object 中包含所有对象的通用方法
新式类和经典类:
新式类 只要是继承自object的都叫新式类 在python3中所有类都是新式类
python2 中不会自动继承object 需要手动继承object才能变成新式类
新式类和经典类的区别在继承关系中的属性查找顺序不同
继承的第二种使用方法:
直接继承一个系统已有的类,来拓展新功能
派生与覆盖:
派生:
当一个类继承另一个类 并存在与父类不同的内容时 就称之为派生类
通常情况下一个子类就是一个派生类
覆盖:
在继承关系中,子类可以出现和父类完全相同的方法,根据查找顺序,会
优先使用子类中的方法 这种情况就称之为覆盖
子类重用父类方法:
很多情况下我们需要在子类中来访问父类中的内容
就可以通过子类重用父类方法来调:
1. 父类名字.__init__(self,变量名)
2. super(子类名字,self).__init__(变量名)
3. super().__init__(变量名)
组合:
即把不用的对象组合到一起 也是用来减少重复代码
组合:一个对象可以吧另一个对象作为属性来使用
多继承与菱形继承:
python支持同时继承多个类
好处:可以同时拥有多个类中已存在的内容
坏处:如果父类中出现了重复的名字 执行顺序需要参考mro列表
查看mro列表:类名.mro()
新式类的在继承中属性查找顺序是先查看深度,找到公共父类开始广度查找
经典类是深度查找