面向对象总结
基础概念
- 类——具有相同方法和属性的一类事物
- 对象、实例——一个用用具体属性值和动作的具体个体
- 实例化——从一个类得到一个具体对象的过程
组合
- 一个类的对象作为另一个类的实例变量
- python是课程类的对象
- 晶晶是学生类的对象
- 晶晶.course = python
- 学生和课程便产生了一种组合
三大特性
- 封装
- 广义的封装:类中的成员
- 狭义的封装:私有成员
- __名字
- 只能在类的内部使用,既不能类的外部调用,也不能在子类中使用
- 类名__名字
- __名字
- 继承
- 所有的查找名字(调用方法和属性),都是先找自己的,自己没有的找父类的,如果自己和父类都累,希望自己和父类都调用,可以用super()/指定类名直接调用
- 父类、基类、超类
- 派生类、子类
- 多继承
- 查找顺序
- 深度优先——python2
- 广度优先——python3
- 单继承——子类可以调用父类的方法
- 查找顺序
- 多态
- 一个类表现出的多种状态-------->多个类表现出的相似状态
- user类 用户类
- vip_user
- 完成支付功能
- 浏览山商品
- svip_user
- 完成支付功能
- 浏览山商品
- vip_user
- user类 用户类
- 鸭子类型
- vip_user和svip_user
- list和tuple
- 一个类表现出的多种状态-------->多个类表现出的相似状态
类成员
- 特殊成员
- 类成员
- 绑定方法
- 特殊方法
- 类方法 classmethod——将原本对象调用的方法变为类调用的方法
- 静态方法 staticmethod——将普通函数挪到类里
- 属性 property——将普通方法伪装成属性
双下方法/魔术方法/内置方法
- _srt_
- __new__构造方法
- __init__初始化方法
- __dict__属性
- _call_ 源码中很容易写这样的方法
- _enter _exit_ with上下文管理
- _getitem
- _settitm_
- _delitem_
- __add__两个对象相加
- _iter_
- _dict_
相关内置函数
- isinstance——对象和 类的关系
- issubclass——类和类的关系
- type——类型 类 = type(对象)/平常皆为内置
- super——遵循mro顺序查找上一个类的
新式类和经典类
-
py2继承object就是新式类
-
默认是经典类
-
py3都是新式类,默认继承object
-
新式类
- 继承object
- 支持super
- 多继承 广度优先:C3算法
- mro方法——可以通过mro算法看继承顺序D.mro()
-
经典类
- py2中不继承object
- 没有super语法
- 多继承 深度优先
- 没有mro方法