面向对象基础总结

面向对象编程

一.面向对象基础

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.2 反射

反省,一个对象具备修改,访问自身属性的能力

是通过字符串形式来操作对象的属性

setattr

delattr

hasattr

getattr

 

4.3 内置方法

__str__ 打印对象时触发 需要返回一个字符串类型
__del__ 删除对象前出发  用于回收不属于解释器的资源 (即使不写任何代码  对象自动回收)

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

 

异常处理

1.什么是异常 以及 为什么要处理异常

程序出错前的一个信号, 如果不正确处理,程序中断执行

避免程序终端执行 提供程序的健壮性

2.异常的分类

1.语法检测异常

2.运行时异常 (逻辑错误异常)

3.异常的组成

追踪信息

异常类型

异常的详细信息

4.异常处理语法

try 多分支的except

try except finally

5.断言

简化了if判断 如果断言失败直接抛异常

6.自定义异常类

当系统内置的异常类型 无法准确描述你的错误原因时

继承BaseException

7.主动抛出异常

raise 任意异常类或异常类对象

解决报错

1.如果追踪信息中所有代码都是你自己写的 那么出错的位置一定在最后一行

2.你使用了一些第三方的模块 抛出异常最后的位置不是你写的 而是第三方模块中的 那么一般错误发生的位置在最后属于你写的代码的地方

 

一堆常用模块

re 正则表达式

sys 解释器相关 sys.path sys.argv sys.modules

os 处理操作系统相关 文件相关操作

os.path 处理文件路径

time 获取时间 时间类型转换

datetime 日期时间 now()

pickle 序列化 任何python类型 不能跨平台

json 常见几个类型 可以跨平台

xml 一种具备结构的文档 python不常用

hashlib 一堆hash算法 用于加密 文件校验

shutil 高级的文件处理模块 文件复制 移动 删除 压缩

random 随机数生成 模块 生产6位数的随机验证码

loggin 用与处理日志的模块 生成器 过滤器 handler formatter 级别5种 10 - 50

xlrd 用于读取表格数据

configparser 解析配置文件

 

 

什么是 模块

一堆导入语法

导入模块是发生的事情

模块的分类:

内置的

第三方的

dll

init

 

函数

形式 位置形参 默认值形参 ,可变长位置形参 可变长关键字形参

实参 位置实参 关键字实参 *args **kwargs 将元组 或字典 打散

 

闭包函数:

一个函数被另一个而函数包裹起来 这个函数可以访问外层函数的名称空间

当我们将内层函数作为返回值时,外界拿到函数的同时拿到了外层函数中的内容

装饰器:

在不修改调用方式以及源代码的前提下 为一个函数扩展新功能

用闭包来实现

有参 和 无参

 

# 获取随机验证码 可以指定长度
import random
def get_auth_code(num):
  res = ""
  for i in range(num):
      # 随机一个大写
      a = random.randint(65,90)
      # 随机与一个小写
      b = random.randint(97,122)
      # 随机挑一个
      c = random.choice([a,b])

      # 随机0-9
      d = random.randint(0,9)
      # 在数字和字符之间随机一个
      e = random.choice([d,c])
      if e > 9:
          res += chr(e)
      else:
          res += str(e)
  return res

print(get_auth_code(16))

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-08-05 10:02  -Rye-  阅读(87)  评论(0)    收藏  举报