【发布时间】:2012-01-20 06:09:10
【问题描述】:
我参加了一个关于装饰器模式的会议,其中提供的大多数示例都是用 java 编写的。例如,在下面的示例中,Pizza 对象用两个浇头装饰。
Pizza vegPizza = new ToppingsType1(new ToppingType2(new Pizza()))
在 python 中,我已经看到在这样的场景中使用装饰器
@applyTopping2
@applyTopping1
makePizza():
pass
虽然在这里我可以看到 makePizza 函数被两个函数修饰,但它与 java 的基于类的方法有很大不同。 我的问题是 python 装饰器是严格实现装饰器模式还是实现有点不同但想法是一样的。
PS:我不确定在哪里查找装饰器模式的标准定义。虽然 wikipedia 给出了一个动态语言 (JS) 的示例,但我的问题仍然很好:)
【问题讨论】:
-
没有什么能阻止 Python 装饰器成为类。
-
严格执行装饰器模式?装饰器的外观是否有标准定义?
-
我认为你有责任去定义什么是“严格的装饰器模式”。 (然后,我们 Python 爱好者可以继续描述为什么严格性无关紧要并为 Python 方法辩护:-))
-
@jsbueno 这很有趣,因为这是真的。无论如何,请检查:stackoverflow.com/questions/739654/…。这是装饰器如何在 Python 中工作的示例。你会看到它是否符合你对设计模式的期望。
-
我也暗中希望有人会来捍卫 python 方法,但遗憾的是 python wiki 说它们是不同的;(无论如何我不在乎,装饰器模式很高兴知道,但我我现在只使用 python 装饰器:) :)
标签: python design-patterns decorator