1.面向对象
1.1 面向对象基础
面向过程编程:把一个需求分解成一系列要执行的步骤,然后按照步骤依次执行这些任务(关注的是流程,步骤)
适用场景:面向过程非常直接,适合简单,线性的任务
比如盖房子:
面向对象编程:关注的是哪个对象来帮我做这件事
- 对象:可以理解为现实中具体的人/物在程序中的数字化身(万物皆对象),它把一个人/物的特征(属性)和功能(方法)打包到一起,是面向对象编程的基本单元
类与对象:
类:描述的是一组具有相同属性和方法的模板
对象:对象是类的实例,是基于类创造出来的(实例对象)
注意:对象是类创建出来的,创建对象的过程,也称为对象的实例化,一个类可以创建无数个对象
1.2 类与对象
定义类的语法如下:
- 类名的命名规范:遵循大驼峰命名法,每个单词的首字母都是大写,单词之间没有分隔符,比如:UserInfo,UserAccount
- _ _dict_ _:是 Python 中用户自定义类实例的一个特殊属性,用于以字典形式存储对象的属性
不推荐在创建对象时动态地为对象添加属性,因此主流使用:定义类时指定实例属性
说明:
- 定义在类的外面的函数称之为函数,定义在类中的函数称之为方法
- _ _inint_ _:初始化方法,对象创建后自动调用,主要用于设置对象的初始化状态(设置对象属性)
- self :方法的第一个参数,表示当前创建的实例对象
小结:
1.3 实例方法
在类中定义实例方法时,定义语法与之前学习的函数定义的方式一致
注意:self 表示当前实例对象,在方法调用时无需传递
1.4 魔法方法
- 魔法方法是指Python中提供的以双下划线_ _开头和结尾的特殊方法,用于定义类的特殊方法,比如:_ _init_ _
- 魔法方法无需手动调用,Python会在合适的时机自动调用
直接使用对象名进行输出和比较时存在的问题如下:
小结:
1.5 实例属性与类属性
属性分为:
- 实例属性:实例属性属于每个具体对象的属性,每个对象都是独立的。(各个对象特有的属性)
- 类属性:类属性是属于类本身的属性,所有同类的实例对象共享(所有对象共有的属性)
说明:通过实例查找属性时,会先查找实例属性,实例属性不存在时,再进行查找类属性
2.异常
2.1 异常定义
异常(也称为BUG)就是程序运行过程中出现的错误,它会中断程序的正常执行流程
作用:
- 保证数据,逻辑的正确性,避免程序执行混乱
- 在开发阶段,尽量发现更多的问题,尽早解决问题,保障程序正常执行
基础异常类型:
| 异常 | 说明 | 报错示例 |
|---|---|---|
| NameError | 访问未定义的变量名 | print(a),没有定义 a |
| TypeError | 数据类型不匹配,做了不支持的运算 | 'abc' + 10;len(123) |
| IndexError | 序列 (列表 / 元组 / 字符串)索引下标越界 | lst=[1,2]; lst[10] |
| KeyError | 字典访问不存在的 key | d={"a":1}; d["b"] |
| ValueError | 类型正确,但值内容非法 | int("python");float("abc") |
2.2 异常处理方案
程序运行过程中出现异常,有两种处理方案:
1.不做处理:整个程序因为一个BUG,中段执行(之前编写的程序)
2.捕获异常:按照我们自己的处理方式,处理完异常,程序继续执行。(编写程序时,做好预案,出现异常,按预案处理)
2.3 异常的传递
异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序崩溃