python @decorator与装饰器设计模式有关吗?

我在这看起来似乎很愚蠢.但是,我正在写一些python代码,这件事让我感到震惊.在python中有一些叫做装饰器的东西,用@表示并使用“around”函数,如:

class PlotABC(metaclass=ABCMeta):

  @property
  def figure(self):
    if self._figure is None: self.__create_figure()
    return self._figure

  @abstractmethod
  def _prepare_series(self):
    pass

我也知道设计模式的细节,我知道有些模式称为装饰器.然后我曾经想过,“嘿,也许这个名字相似并不是一个奇怪的巧合.”

我已经阅读了wiki: Decorator pattern和最佳答案How to make a chain of function decorators?(几乎全部).

在我看来,python的装饰器语义非常强大,可以用来实现设计模式.因为它们允许包围函数和方法.虽然,我仍然感到困惑,因为我对设计模式缺乏经验.我也不知道有这种专门机制的语言.

有经验的python和设计模式的人是否可以故意创建python语义来创建装饰模式?它是更多,更少,还是意味着不同的东西?

并且可能会说明如何声明方法摘要或属性正在装饰它?

解决方法:

不,这不是一个奇怪的巧合,不,python @decorators不实现GOF Decorator模式.

GOF(Gang of Four,以“Design Patterns”一书的四位作者命名)装饰图案添加了“装饰”来改变对象的行为.它通过创建可以应用于未修饰的基类的“装饰器”类来实现.

Python装饰器为函数或类添加“装饰”.这些装饰器本质上是包装或修改函数/类的函数.

两者的相似之处在于您可以重复使用装饰器多次添加相同的功能,但装饰器模式要求装饰器与您可以装饰的类一起设计.

Python装饰器只是在任何类函数上完成它们的工作.

上一篇:java – 用于IO的GoF Decorator模式的用例和示例


下一篇:Python修饰一个类来改变父对象类型