第8章 装饰器和mixin——横切方面

一个软件的设计通常会包括一些跨越了不同的类、函数和方法的方面。有关技术方面的例子,包括日志、设计和安全,这些方面必须有一致地实现。在面向对象编程中,重用功能的通用方法是继承一个类。但是,继承并不总是最合适的方案。在软件设计中,有一些方面和类层次结构是正交的。这些通常被称为“横切关注点”(cross-cutting concerns)。它们会跨越多个类,让设计变得更加复杂。

装饰器提供了一种不用和继承结构绑定的定义功能的方法。我们可以用装饰器设计应用程序中的某个方面,然后将装饰器应用于类、方法或者函数。

另外,我们可以谨慎地使用多重继承创建横切方面(Cross-outting Aspects)。会考虑用一个基类加上mixin类的方式来引入新功能。通常,我们会使用mixin类创建横切方面。

值得注意的是,横切关注点很少限定于当前的应用程序,它们通常是通用的设计。常见的日志、审计和安全的例子可以被认为是项目基础架构的一部分,与应用程序的细节是独立的。

Python内置了许多装饰器,我们可以扩展这些标准的装饰器。在一些不同的应用场景中,我们会介绍简单的函数装饰器、带参数的函数装饰器、类装饰器和方法装饰器。

对象的一个基本特性就是它们可以被分类。每一个对象都属于一个类。这是对象和类之间的一种简单关系,它只需要一个简单的、单继承的设计。

如果考虑多重继承,分类的问题就变得复杂了。当我们审视真实世界中的物体时,例如咖啡杯,我们可以很容易地将它们归类为容器。毕竟,那是咖啡杯的主要用途。它们解决的问题就是装咖啡。但是,在另外一种环境中,我们可能会对其他的用途感兴趣。对于一个装饰性的陶瓷杯,相比于一个杯子在装咖啡方面的能力,我们可能对尺寸、形状和釉彩更感兴趣。 ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.