一、官方文档的检索方式
二、官方文档的阅读和使用
三、类的关注点
1.类实例化所需的参数
实例化类(类名())的本质是调用类的构造逻辑,核心参数由__init__方法定义(极少数场景需关注__new__,但__new__参数通常与__init__一致)。
(1)核心规则
实例化时传入的参数,会被直接传递给__init__方法,参数的类型、个数、默认值完全由__init__决定。
(2)常见参数类型
| 参数类型 | 示例 | 说明 |
| 必选参数 | def __init__(self, name): | 无默认值,实例化时必须传(如Student("张三"))。 |
| 默认参数 | def __init__(self, age=18): | 有默认值,实例化时可选传(如Student("张三")用默认 18,Student("李四", 20)覆盖)。 |
| 可变位置参数 | def __init__(self, *args): | 接收任意个数的位置参数,打包为元组(如Student("张三", 18, "高一"))。 |
| 可变关键字参数 | def __init__(self, **kwargs): | 接收任意个数的关键字参数,打包为字典(如Student(name="张三", age=18))。 |
| 关键字 - only 参数 | def __init__(self, *, grade): | 必须以关键字形式传递(如Student("张三", grade="高一"),不能传位置参数)。 |
2.普通方法所需要的函数
在面向对象编程中,普通方法(通常指 “实例方法”) 是类中最核心的函数类型,它依附于类的实例、能访问 / 修改实例状态,其设计和实现遵循函数的基本规则,但又和类的特性深度绑定。
普通方法(实例方法)是定义在类内部、第一个参数固定为self 的函数,它的核心作用是实现实例的 “行为”—— 操作实例的属性、完成特定业务逻辑,只能通过类的实例调用(而非直接通过类调用)。
它和普通函数的核心区别:
- 必须绑定实例(self参数由解释器自动传递,指向调用该方法的实例);
- 可直接访问实例属性(self.xxx)和类属性(self.__class__.xxx/ 类名.xxx);
- 可调用类内的其他普通方法、类方法、静态方法。
普通方法(实例方法)的核心构成(所需要素)
一个完整的普通方法,本质是 “带self参数的函数”,其所需的核心要素和普通函数一致,但需适配类的特性。
| 要素 | 说明 |
| 必选的self参数 | 第一个参数必须是self(命名约定,也可写其他名字,但解释器默认传实例),用于绑定调用方法的实例,通过它可访问 / 修改实例属性。 |
| 业务参数(可选) | 除self外,可根据业务需求定义任意参数(和普通函数的参数规则完全一致): 1. 必选参数:无默认值,调用时必须传; 2. 默认参数:有默认值,调用时可选传; 3. 可变位置参数(*args):接收任意位置参数; 4. 可变关键字参数(**kwargs):接收任意关键字参数; 5. 关键字 - only 参数(*, param):必须以关键字形式传递。 |
| 函数体逻辑 | 实现方法的核心功能,可: 1. 读取 / 修改self上的实例属性; 2. 调用类的其他方法(如self.other_method()); 3. 调用类属性(self.school); 4. 执行任意业务逻辑(计算、IO、判断等)。 |
| 返回值(可选) | 用return返回结果,无return则默认返回None;返回值类型根据业务需求设计(如数值、字符串、对象、布尔值等)。 |
3.普通方法的返回值
普通方法的返回值和普通函数的返回值规则完全一致,核心差异仅在于:返回值通常与实例的状态(self绑定的属性)强相关,服务于实例的 “行为结果”。
核心规则:
- 用 return [值] 显式指定返回结果,无 return 或 return 后无值 → 方法默认返回 None;
- 可返回任意 Python 对象(数值、字符串、列表、字典、自身实例、甚至另一个类 / 函数);
- 返回值的设计需匹配方法的业务目标(比如 “查询类方法” 返回具体数据,“操作类方法” 可返回None或自身实例)。
| 返回值类型 | 说明 | 典型场景 |
| 无返回值(None) | 方法仅执行操作(如修改实例属性、打印、IO 操作),无需返回结果 | 修改实例的成绩、更新实例的信息、打印实例详情 |
| 基础数据类型(int/str/bool/float) | 返回单个计算结果、状态标识、文本信息 | 计算平均分(float)、判断是否及格(bool)、获取姓名(str) |
| 复合数据类型(list/dict/tuple) | 返回批量数据、结构化结果 | 返回实例的所有成绩(dict)、返回成绩排名(list)、返回姓名 + 年龄(tuple) |
| 类实例(自身 / 其他类) | 返回self实现链式调用,或返回关联的其他实例 | 链式调用(self)、返回总分更高的同学实例、返回学生的班主任实例 |
| 特殊类型(None/异常) | 无有效结果时返回None;异常通过raise抛出(而非返回) | 查询不存在的科目成绩返回None;参数非法时raise ValueError(不返回值) |
四、绘图的理解
绘图的本质是将 “抽象的图形逻辑 / 数据” 转化为 “可视化的像素 / 矢量图形” 的过程,核心是 “分层实现”—— 从用户能理解的 “画一条折线、一个柱状图”,到计算机能执行的 “操作像素、渲染路径”,整个流程分为三层,且底层库是实现可视化的核心支撑。
| 分层 | 作用 | 示例 |
| 应用层(业务层) | 用户编写的业务逻辑,定义 “画什么”(如基于数据画折线图、设置颜色 / 标题) | plt.plot(x, y, color='red') |
| 抽象绘图层(中层) | 封装高层图形逻辑,将用户指令转化为 “底层能识别的图形描述”(如路径、画笔、颜色) | Matplotlib/Seaborn/Plotly |
| 底层渲染 / 图像层 | 执行 “真正的绘制”:将图形描述转化为像素 / 矢量数据,处理图像格式 / 硬件显示 | Agg/Cairo/Skia、libpng/libjpeg、OpenGL |
1.绘图的核心是 “分层转换”:用户的高层需求 → 抽象绘图层的图形描述 → 底层库的像素 / 渲染执行;
2.底层库是绘图的 “引擎”,负责真正的渲染 / 图像编码,多为 C/C++ 编写,Python通过绑定调用;
3.调用方式分两种:
间接调用(主流):上层库(Matplotlib/PIL)封装底层逻辑,用户写简洁代码;
直接调用(定制化):通过 pycairo/PyOpenGL 等绑定,手动操作底层 API;
4.选择原则:优先用上层库提升开发效率,仅在定制化 / 性能极致要求时直接调用底层。
@浙大疏锦行