我在这看起来似乎很愚蠢.但是,我正在写一些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装饰器只是在任何类函数上完成它们的工作.