day31
目录
面向对象的三大特性:
- 继承(组合)
- 封装
- 多态
继承
分为父类和子类,一个子类可以继承多个父类,并且派生出自己的属性
__bases__
是类的属性,用来查找当前类的父类
继承的目的
减少代买冗余
如何实现继承?
- 首先要确定好谁是子类,谁是父类
- 在定义类时,子类+(),()内些父类,实现继承
寻找继承关系
要想寻找继承关系,首先要“先抽象,再继承”
什么是抽象?
抽象指的是抽取相似的部分,称之为抽象
继承的关系:
继承是一系列 类 相同的特征与技能的结合体
继承背景下对象属性的查找顺序
- 对象查找属性会先从对象的名称空间中查找。
- 若对象没有,则会去类里面找。
- 若当前类时子类,并且没有对象找的属性,会去父类中查找
注意:对象查找属性,若子类有 ,不管父类有没有,以子类的为准
派生
派生指的是子类继承父类的属性,并且派生出新的属性
子类派生出新的属性,若与父类的属性相同,则以子类的为准
继承是谁与谁的关系,指的是类与类的关系,子类与父类是从属关旭
子类派生出新的属性并重用父类的属性
子类继承父类的__init__
毫无意义
解决方式
方式一:
直接通过 父类.
(调用)__init__
,把__init__
当做普通函数使用,传入对象与继承的属性
方式二:
super
是一个特殊的类,在子类中调用super()
会得到一个特殊的对象
用过.
指向的是父类的名称空间
注意:两种方式不要混合使用
新式类与经典类(了解)
在python2中,才会有新式类与经典类之分
在python3中,所有的类都是新式类
新式类:
继承object 的类都称之为新式类
python3中,子类不继承自定义的类,默认继承object
经典类:
在python2中,凡是没有继承object的类都是经典类
mro()
属于object--》type的函数,用来查看当前类的继承顺序,在多继承的情况下