类元编程指在运行时创建或定制类的技艺。在 Python 中,类是一等对象,因此任何时候都可以使用函数新建类,无须使用 class 关键字。类装饰器也是函数,不过能够审查、修改,甚至把被装饰的类替换成另一个类。最后,元类是类元编程最高级的工具:使用元类可以创建具有某种特质的全新类,例如前面讲过的抽象基类。
流畅的 Python 第 2 版(23):属性描述符
学会描述符之后,不仅有更多的工具集可用,还能对 Python 的运作方式有更深入的理解,不得不由衷赞叹 Python 设计的优雅。描述符是对多个属性运用相同存取逻辑的一种方式。例如,Django ORM 和 SQLAlchemy 等 ORM 中的字段类型就是描述符,其把数据库记录中字段里的数据与 Python 对象的属性对应了起来。
流畅的 Python 第 2 版(22):动态属性和特性
在 Python 中,数据属性和方法统称属性(attribute)。其实,方法是可调用的属性。动态属性(dynamic attribute)的接口与数据属性一样(obj.attr),不过按需计算。这与 Bertrand Meyer 所说的统一访问原则(Uniform Access Principle)相符。
流畅的 Python 第 2 版(21):异步编程
这篇文章将介绍 Python 中的异步编程,这些内容建立在之介绍的可迭代对象和生成器、上下文管理器、以及并发编程一般概念等基础之上。
流畅的 Python 第 2 版(20):并发执行器
对于线程,应用程序开发者遇到的使用场景,99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集结果。这篇文章讨论实现了 concurrent.futures.Executor 接口的类,这些类对上面这种使用场景进行了封装,使用起来特别容易,不仅能用于线程,而且还能用于进程处理计算密集型任务。同时还会介绍 future,这种对象表示异步执行的操作,类似于 JavaScript 中的 promise。
流畅的 Python 第 2 版(19):Python 并发模型
并发指同时处理多件事,并行指同时做多件事。二者不同,但有联系。一个关于结构,一个关于执行。并发用于制定方案,用来解决可能(但未必)并行的问题。并行是并发的一种特殊情况。所有并行系统都是并发的,但不是所有并发系统都是并行的。
这篇文章将展示 Python 的 3 种并发方式:线程、进程和原生协程。
流畅的 Python 第 2 版(18):with、match 和 else 块
这篇文章学习一些在其他语言中不常见的控制流功能,包括 with 语句和上下文管理器协议,匹配模式的 match/case 以及 for、while 和 try 语句中的 else 子句。
流畅的 Python 第 2 版(17):迭代器、生成器和经典协程
迭代是数据处理的基石:程序将计算应用于数据序列。如果数据在内存中放不下,则需要惰性获取数据项,即按需一次获取一项,这就是迭代器的作用。
流畅的 Python 第 2 版(16):运算符重载
一门易于使用的高级语言,再加上支持运算符重载,这或许是 Python 在数据科学领域(包括金融和科学应用程序)取得巨大成功的关键原因。这篇文章将学习 Python 的运算符重载机制。
流畅的 Python 第 2 版(15):类型提示进阶
惨痛的教训告诉我,对于小型程序,动态类型就够了,而大型程序则需要更规范的方式。如果语言能做出规范,那么当然比 放任自流 要好。这篇文章我们将继续讲解 Python 的渐进式类型系统。