第4章 面向对象编程


第 4 章 · 面向对象编程

章节摘要:从解释器视角看,类是"能生产实例的 callable 对象",实例是"带命名空间字典的堆对象"。本章先讲类与实例的机制(属性查找、__dict__、描述符雏形),再讲继承体系(MRO、super、魔术方法、鸭子类型)。读完你写的不只是"正确的类",而是"知道每一步落在哪"的类。

学习目标

阅读完本章,你应当能够:

  1. 画出"实例 → 类 → type"三层关系图,解释 type 三参数造类;
  2. 描述属性查找顺序:数据描述符 → 实例 __dict__ → 类 __dict__(含继承链);
  3. 说明 MRO 的 C3 线性化结果,正确使用 super();
  4. 用魔术方法(__repr__、__eq__、__len__、__getitem__ 等)接入语言协议;
  5. 区分"继承复用"与"组合复用"的适用边界,理解鸭子类型的判型哲学。

核心概念速览

一个对象的所有"个性"存在自己的 __dict__,所有"共性"存在类里——继承只是在查找路径上多走几步。

子章节导航

4.1 类对象与实例对象

类的本质、__init__ 的准确角色、属性查找链、__slots__ 瘦身与 property。

4.2 继承、多态与魔术方法

MRO 与 super、魔术方法如何接入协议、鸭子类型与 __eq__/__hash__ 的配套。

子章节之间的逻辑关系

4.1 讲"一个对象的内部构成",4.2 讲"多个类型如何组织成网"。前者是后者的地基:不理解属性查找链,MRO 只是背题。

前置知识与后续延伸

  • 前置:第 1 章对象模型、第 3 章函数是一等对象。
    给一个自测题收束本章:解释器执行 Dog 旺财 3 这行代码时,先后经过哪两个魔术方法、各自负责什么?如果你能不假思索地说出 new 分配、init 填装,并能顺带讲清实例属性和类属性分别住在哪个字典里,那么无论多复杂的类图,拆开看都只是本章这几块积木的堆叠。自测之外再补一句设计心态:初学者写类容易犯两种病,一种是万物皆类,把三个参数能解决的过程硬塞进一个类;另一种是类即数据袋,只放属性不放行为,等于换了语法的全局变量。健康的状态介于两者之间:先想清楚这组数据有哪些不变量要维护(余额不能为负、订单状态只能合法迁移),把维护不变量的动作写成方法,属性只是方法的原料。

  • 为后续铺垫:第 7 章装饰器(类作装饰器、类方法增强)、第 9 章 ORM 与框架里的元编程都直接建立在本章。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U