全书总评
- 书本印刷质量 : 3 星。纸张有点薄,印刷清楚,文字排版有点紧凑,基本没有排版过程中引入的错误,阅读不累眼睛。
- 著作编写质量 : 3 星。全部都是细节,看完后可能会对面向对象编程的所有点都有个映像。全书更多描述的是怎么用,但是没有说明为什么这样用。整体框架也过于散乱,许多知识点不容易记住。看的时候思路很容易就跟丢了,例子也是中国人不太熟悉的 21 点扑克,跟实际工作结合太少。
- 著作翻译质量 : 4 星。没有明显的问题,基本使用的都是业界常用词汇。
- 代码质量 : 4 星。代码问题不大,可以参考着输入练习,只是学习过程中兴趣不大。
读书笔记
C01.__init__()
方法,类的初始化
- Object 类是所有类的基类;
- Python 没有常量,没有访问控制权限,所有都是公共变量;
- Python 使用 @staticmethod 定义类中的静态方法
- Python 的命名可以参考 PEP8 和 PEP20.
C02. 类的其他的基本特殊方法,Object 这个基础类的一些方法
__repr__()
,__str__()
,__format__()
用来定义类的输出;__bool__()
用于自定义集合,参考 C06- 比较运算符可以重载,并且需要
__hash__()
来支持。参考 C08 __new__()
和__del__()
用于类的创建前和销毁前,跟内存管理相关。
C03. 三种定义类中数据的方法 ( 属性、特性、修饰符 )
- 属性的基本操作 : 创建、赋值、获取、删除。
- 创建特性。@property,@x.setter,@x.deleter 修饰符,
property()
函数。特性在语法上是个函数,使用起来像是属性。并且对属性可以动态设置,还可以删除,使类更加像一个动态的数据结构。 - 创建修饰符。属性的访问中介,修饰符类用来获取、赋值或删除属性值。拥有者类 + 属性修饰符。
- 标识为修饰符类需要实现的方法 :
__set__()
,__get__()
,__delete__()
- 修饰符类型 :
- 非数据修饰符
- 数据修饰符
- 标识为修饰符类需要实现的方法 :
C04. 抽象基类
容器类、数值类、IO 类等等各种相似类型的类都有抽象基类,并且这些基类基于相同的设计原则。
- 抽象基类 : 核心定义在名为 abc 的模块中,模块中包括了创建抽象基类需要的修饰符和元类型。
- 基类与多态 : “请求原谅比请求许可更好。”→“做错了总比不做要好。” : 尽量减少测试参数的正确类型 ( 请求许可 ) ,而是调用它并且合理地处理异常 ( 讲求原谅 ) 。
- 可调用对象 : 参考第 5 章,所有的函数都属于 Callable 类。
- 容器与集合 : 参考第 6 章,除了内置的容器类,还有许多其他容器类。
- 数值类型 : 参考第 7 章,所有的数值以及类数据类型都由 numbers.Number 这个抽象基类定义。
- 其他的一些抽象基类 :
- 迭代器 : 参考第 6 章,当 for 语句中使用一个可迭代的容器时,Python 会隐式地创建一个迭代器。
- 上下文和上下文管理器 : 参考第 5 章,上下文管理是和 with 语句一直使用的。
- abc 模块 : 如何创建抽象基类。
C05. 上下文
- 使用 abc.Callable 来进行设计 :
- 类继承自 abc.Callable
- 定义了
__call__()
方法 - 创建了类的实例
pow1()
- 提高性能 : 利用
timeit()
来分析性能。- 使用递归函数
- 记忆化与缓存
- 使用
functools
完成记忆化 : - 可调用 API 应对复杂性 :
- 上下文管理 :
with
语句,可以保证资源被正确释放 - 自定义上下文管理器 : ( 参考Ch 08 ) 了解
__enter__()
方法返回的 self。- 定义
__enter__()
,__exit__()
,with 语句使用它们进行上下文的进入与退出。 - 异常处理 : 抛出的异常会传给上下文管理器中的
__exit__()
函数。
- 定义
- 上下文管理器工厂 :
- 总结 :
__call__()
方法用于创建一个可调用对象,可调用对象用于创建有状态的函数。__enter__()
和__exit__()
用于创建上下文管理器,上下文用于处理 with 语句中的逻辑处理