面向对象复习顺便总结之前所学知识

一、面向对象基础
1.1面向对象编程思想概念
对比:
面向过程关注的是具体实现的步骤(怎么做,操作者)
把复杂问题简单化,流程化,扩展性差
面向对象关注的是什么对象可以完成这个操作(谁来做,指挥者)
扩展性高,灵活性,复用性,降低耦合
复杂度高了,结果不可预测
是一种编程思想,核心是对象
对象是一系列特征和技能的结合体(一切皆对象)
类:是一系列相同特征和技能的结合体,它是一种抽象概念,在生活中不实际存在
程序中需要先定义类,在实例化产生对象

1.2面向对象中的类和对象的使用
class声明一个类,类中放的是所有对象公共的属性和方法,类就相当于是一个对象的模板(工厂)
对象属性的增删改查
init方法用于在创建对象后立即为属性赋值
属性查找顺序:对象->类

1.3绑定方法,非绑定方法
方法本质其实就是函数,在oop中称之为方法
绑定方法:
1.绑定给对象的方法
在使用类调用时与普通函数一致,用对象调用时自动传入对象作为第一个参数
2.绑定给类
在使用类调用时自动传入类作为第一个参数
非绑定方法:
如何调用都是一个普通函数
类和对象的两个内存地址都是独立的

二、三大特征之继承
2.1什么是继承及其特点
继承是一种类与类之间的关系
子类(派生类) 父类(基类,超类)
特点:子类可以拥有父类中的所有属性,但是不包括私有的
好处:提高代码的重用性
2.2如何继承
class子类名称或父类名称
抽象:从一堆类中抽取出相同的特征和行为形成一个新的公共父类(先抽象再继承)
派生:子类拥有与父类不同的内容
覆盖:子类拥有与父类完全相同的名称
继承的使用:
1.抽象 继承
2.继承已经存在的类扩展新功能
2.3属性的查找顺序
对象->自身类->父类
2.4新式类和经典类
直接或间接继承object的类都是新式类,在python3中默认所有类都直接或间接继承object(都是新式类)
经典类不是object的子类,只在python2中出现(py2也可以手动改成新式类)
区别:存在菱形继承时,查找顺序不同
2.5多继承,菱形继承,mro列表
python中一个类可以同时继承多个父类
菱形继承是说多个父类之间还有公共父类
在新式类中存在菱形继承,查找顺序是:先深度当遇到公共父类时再广度
在经典类中存在菱形继承,查找顺序是:深度优先
如果不存在菱形继承时,都是深度优先
属性的查找顺序会严格按照mro列表
通过类名 .__mro__

三、三大特征之封装
3.1什么是封装,及其特点
对外隐藏实现细节,提供简单的调用接口
就像汽车隐藏了一堆零件,只提供方向盘和油门
好处:隔离了复杂度,提高了安全性
3.2如何封装
在名称前加上双下划线
由于无法直接访问私有内容,所以提供设置器和访问器(两个方法)
property
为了统一私有属性和普通属性的访问方式,于是使用property可以将方法伪装成普通属性(计算属性)
setter
用于修改私有属性的装饰器
deleter
用于删除私有属性的装饰器
3.3封装的实现原理
在定义阶段修改属性的名称为_类名+属性名称
3.4接口
一组功能的集合
特点是所有功能都没有实现,只有声明
3.5抽象类
抽象即,不清晰,不具体,看不懂
如果一个类中具有抽象方法,类就称之为抽象类
特点:不能直接实例化产生对象,必须由子类覆盖并实现了这些抽象方法
abc模块强制子类必须实现抽象方法

四、三大特性之多态
4.1什么是多态,多态的好处
一种事物具备多种形态
多个不同类型的对象,可以响应同一个方法,产生不同结果
一个公共父类,下面有多个子类,这些子类对象都能响应刚刚父类中声明的方法
好处:提高了程序的扩展性
4.2鸭子类型
python不推荐强制限制语法,推荐鸭子类型
只要你长的像,行为像,就把你当成鸭子
4.3反射
反省,一个对象具备修改,访问自身属性的能力
字面上就是通过字符串形式来操作对象的属性
setattr 增,改
delattr 删
hasattr 查
getattr 获取
4.4内置方法
__str__ 打印对象时触发,需要返回一个字符串类型
__del__ 删除对象前触发,用于回收不属于解释器的资源(即使不写任何代码,对象也会自动回收)

issubclass 判断一个类是否是某个类的子类
isinstance 判断一个对象是否是某个类的实力

五、异常处理
1.什么是异常以及为什么要处理异常
程序出错前的一个信号,如果不正确处理,程序会中断执行
避免程序中断执行,提高程序的健壮性
2.异常的分类
1.语法检测异常
2.运行时异常(逻辑错误异常)
3.异常的组成
追踪信息
异常的类型
异常的详细信息
4.异常处理语法
try 多分枝的except
try except finally
5.断言
简化了if判断,如果断言失败直接抛出异常
6.自定义异常类
当系统内置的异常类型无法准确描述你的错误原因时需要自定义异常类
需要继承BaseException
7.主动抛出异常
raise任意异常类或异常类对象

解决报错
1.如果追踪信息中,所有代码都是自己写的,出错的位置一定在最后一行
2.你使用了一些第三方的模块,抛出异常最后的位置不是你写的,而是第三方模块中的,
那么一般错误发生的位置在最后属于你写的代码的地方

一堆常用模块
re 正则表达式(QQ邮箱,手机号码,找图片信息)
sys 解释器相关 sys.path sys.argv sys.modules
os 处理操作系统相关 文件相关操作
os.path 处理文件路径
time 获取时间,时间类型转换
datatime 日期时间 now()
pickle 序列化 任何python类型,不能跨平台
json 常见几个类型,可以跨平台
xml 一种具备结构的文档,python不常用
hashlib 一堆hash算法,用于加密,文件效验
shutil 高级的文件处理模块,文件的复制,移动删除,压缩
random 随机数生成模块,生成6位数的随机验证码(笔试必考)
loggin 用于处理日志的模块,生成器,过滤器,handler,formatter,级别5种 10-50
xlrd 用于读取表格数据
configparser 解析配置文件

什么是模块
一堆导入语法
导入模块是发生的事情
模块的分类
内置的
第三方的
dll

init

函数
形式 位置形参 默认值形参,可变长的位置形参,可变长的关键字形参
实参 位置实参,关键字实参 *args**kwargs(将元组或字典打散)

闭包函数
一个函数被另一个函数包裹起来,这个函数可以访问外层函数的名称空间
当我们将内层函数作为返回值时,外界拿到函数的同时拿到了外层函数中的内容

装饰器
在不修改调用方式和源代码的前提下为一个函数扩展新功能
用闭包来实现
有参和无参
posted @ 2019-02-26 16:54  -Rye-  阅读(114)  评论(0)    收藏  举报