什么是继承
继承指的是新建类的方法,新建的类称之为子类或派生类,子类继承的类叫做父类,也称之为基类或超类;
什么是抽象
抽象是抽取相似的部分,称之为抽象
什么是派生
子类继承父类的属性,并且派生出新的属性
继承和派生的特点
继承的特征: 子类可以继承父类的属性,并且可以派生自己的属性
什么是重用
子类可以重用父类的方法,通过:
- 直接通过,父类.attr调用,需要传入对象(self)和需要的参数
- 通过super().atrr调用,不用传入对象形参(self)
继承的目的
减少代码冗余
对象,类和继承的关系
对象是特征与技能的结合体, 类是一系列对象相同的特征与技能的结合体,继承是一些列类相同的特征与技能的结合体
继承背景下对象属性查找顺序
- 优先从对象自己的名称空间中查找
- 若对象没有,则会从类中查找
- 类若没有,则从类的父类中查找
若是多继承情况:
经典类: 深度优先, 新式类:广度优先
什么是经典类和新式类
- 继承object的类是新式类
- python3中, 默认继承object类
- python2中,凡是没有继承object的类都是经典类
什么是组合
一个对象包含另外一些对象作为其属性
组合与继承对比
都可以避免代码冗余,组合可以解耦合
封装
什么是封装
把一堆属性封装到一个对象中,利用了组合的思想
为什么要封装
方便存取,并可控制属性的获取(利用接口)
python对象的访问限制机制
什么是访问限制机制
在定义类时,以__开头的属性,会被隐藏起来(利用改名为_Class_attr的方法), 让外部不能直接访问,但不是强制性的,可以利用(_Class_attr)的名字访问
目的
限制对内部重要数据获取,提供一个接口来对外提供数据
property
什么是property
内部装饰器,使得内部方法的调用看起来像属性的获取
多态
什么是多态
不同对象相同的属性名有不同的属性值,表现为不同的属性形态
多态性目的
不同对象,在使用相同功能的情况下,调用同一个名字
多态的实现:
-继承抽象类,
-鸭子类型
抽象类
什么是抽象类
使用abc模块的abstractmethod装饰方法的类
目的
强制子类必须遵循父类的标准,(必须要定义某些方法)
如何使用
class test(metaclass=abc.ABCMeta):
@abstractmethod
def func(self):
....
鸭子类型
不管对象是何种类型,当在某些属性调用接口满足能被调用的类型时,那就是鸭子类型 。
在python中,不推荐使用抽象类强制限制子类的定义,但是推荐都遵循鸭子类型。
继承:耦合性高,
鸭子类型: 耦合度低
反射
通过字符串对对象或类的属性进行操作
hasattr
getattr
setattr
delattr
魔法方法
__init__ # 调用类时触发
__str__ # 打印对象时触发
__del__ # 对象被销毁时触发
__getattr__ # 查找属性时,属性没有时触发
__setattr__ # 设置对象属性时触发
__call__ # 对象被调用时触发
__new__ # 会在__init__前执行