Python装饰器的设计

在一个项目中,装饰器更多是后期重构代码时才考虑使用,目的是保持代码的封装性和可重用性。主要原因是因为装饰器会改变原有函数行为,如果在初期大量使用,可能会在客户端引发一些不可预见和难以调试的问题,Python装饰器常见的错误

  1. 封装:一个良好的装饰器应有效地在其自身的功能和所装饰的对象之间分离不同的责任。它不能是一个漏洞百出的抽象,意味着装饰器的使用者应只以黑箱模式调用它,而不知道它是如何实现其逻辑的。
  2. 正交性:装饰器的功能应该尽可能独立,与其装饰的对象尽可能解耦。
  3. 可重用性:理想的情况下,装饰器应该能够应用于多种类型,而不仅仅是出现在某一个函数的一个实例上,因为那就意味着它其实只是一个函数。装饰器需要有足够的通用性。在实现装饰器前,要考虑到它需要被多次应用(至少三次)。
  4. 在面向对象编程中,如果需要引入一个混入方法,比起使用一个Mixin类更应该考虑使用装饰器。可以参考这个类装饰器的例子。
  5. 不要从零开始创建装饰器。应等到模式浮现,装饰器的抽象变得清晰后再进行重构。
  6. 保持装饰器中的代码尽可能简洁。