什么是面对对象编程?
- OOP编程(面向对象)
- 把对象作为基本单元,把对象抽象成类(class) 包含成员和方法
- 数据封装,继承,多态
- python中使用类来实现,过程式编程(函数),OOP(类)
组合与继承
- 使用面对对象编程时,优先使用组合而非继承
- 组合是使用其他类的实例作为自己的一个属性(Has-a) 关系
- 子类继承父类的方法(Is-a 关系)
- 优先使用组合保持代码简单
类变量与实例变量的区别
区别类变量和实例变量
- 类变量由所有实例共享
- 实例变量由实例单独享有,不同实例之间互不影响
- 当我们需要在一个类的不同实例之间共享变量需要使用类变量
classmethod/starticmethod区别
- 都可以通过class.method()的方法使用
- classmethod第一个参数是cls,可以引用类变量
- starticmethod使用起来和普通函数一样,只是放在类里面
什么是元类
- 元类是创建类的类
- 元类允许我们控制类的生成,比如修改类的属性等
- 使用type来定义元类
- 元类最常见的一个使用场景就是ORM框架
1 | x = type('X',(object,),{'abc':123,'xx':'xx'}) |
装饰器
- 装饰器是接受函数作为参数,添加功能后返回一个新函数的函数(类)
- 通过@使用
- 类写装饰器
1 | # 一个简单的测算函数运行时间的装饰器 |
设计模式
创建型设计模式
工厂模式:解决对象创建问题
- 解决对象创建问题
- 解耦对象的创建和使用
- 包括工厂方法和抽象工厂
1 | class Dog: |
构造模式
- 用来控制复杂对象构造
- 创建和分离,比如你要买电脑,工厂模式直接把电脑给你
- 但是构造模式允许你自己定义电脑配置,组装完成后给你
原型模式
- 通过克隆原型来创建新的实例
- 可以使用相同的原型,通过修改部分属性来创建新的实例
- 用途:对于一些创建实例开销比较大的地方可以使用原型模式
单例模式
- 单例模式:一个类创建出来的对象都是同一个
- python的模块其实就是单例的,只会导入一次
- 使用共享同一个实例的方式创建单例模式
1 | class Singleton: |
结构型设计模式
装饰器模式
- 无需子类化扩展对象功能
代理模式
- 把一个对象的操作代理到另一个对象
适配器模式
- 把不同对象的接口适配到同一接口
- 想象一下多功能充电头
- 当我们需要给不同对象同一接口的时候可以使用适配器模式
行为模式
迭代器模式
- 通过统一的接口迭代对象
- python内置对迭代器的使用
- python里可以实现__next__ 和 __iter__实现迭代器
观察者模式
- 发布订阅是一种最常用的实现方式
- 发布订阅用于解耦逻辑
- 可以通过回调等方式实现,当事件发生的时候,执行相应的回调函数
什么是闭包?
- 绑定外部作用域的变量的函数
- 即使程序离开外部作用域,如果闭包仍然可见,绑定变量不会销毁
- 每次运行外部函数都会重新创建闭包
- 闭包:引用外部自由变量的函数
- 自由变量:不在当前函数定义的变量
- 特性:自由变量和闭包函数同时存在