gpt4 book ai didi

python - python 装饰器是否严格执行装饰器模式?

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:05 25 4
gpt4 key购买 nike

我参加了一个关于装饰器模式的 session ,其中提供的大部分示例都是在 java 中提供的。例如,在下面的示例中,Pizza 对象被装饰有两种配料。

Pizza vegPizza = new ToppingsType1(new ToppingType2(new Pizza()))

在 python 中,我看到装饰器被用在这样的场景中

@applyTopping2
@applyTopping1
makePizza():
pass

虽然在这里我可以看到 makePizza 函数被两个函数修饰,但它与 java 的基于类的方法有很大不同。我的问题是 python 装饰器是严格实现装饰器模式,还是实现方式略有不同但思路相同。

PS:我不确定去哪里查找装饰器模式的标准定义。尽管维基百科给出了动态语言 (JS) 的示例,但我的问题仍然成立 :)

最佳答案

你应该 read this这解释了什么是 python 的装饰器。

The "decorators" we talk about with concern to Python are not exactly the same thing as the DecoratorPattern [...]. A Python decorator is a specific change to the Python syntax that allows us to more conveniently alter functions and methods (and possibly classes in a future version). This supports more readable applications of the DecoratorPattern but also other uses as well.

因此,您将能够使用 python 的装饰器实现“经典”装饰器模式,但您将能够使用这些装饰器做更多(有趣的;))事情。

在你的情况下,它可能看起来像:

def applyTopping1(functor):
def wrapped():
base_pizza = functor()
base_pizza.add("mozzarella")
return base_pizza
return wrapped

def applyTopping2(functor):
def wrapped():
base_pizza = functor()
base_pizza.add("ham")
return base_pizza
return wrapped

然后你会得到一个玛格丽特 :)

关于python - python 装饰器是否严格执行装饰器模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8504969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com