在Python中,
Python中的装饰器可以改变它的接口是否正确 装饰的功能/类,例如改变签名 装饰类的装饰功能和方法?例如:
>>> def MyDecorator(func):
... def NewFunc():
... pass
... return NewFunc
...
>>> @MyDecorator
... def MyFunc(a, b, c):
... print(a,b,c)
...
所以Python中的装饰器不一定用于实现装饰设计模式,如GoF的“设计模式”一书所述?
编写一个改变装饰函数/类接口的装饰器是不好的做法?
感谢。
答案 0 :(得分:1)
来自python.org(我的重点):
DecoratorPattern是DesignPatternsBook中描述的模式。 这是一种通过封闭来明显修改对象行为的方法 它在具有类似界面的装饰物体内。
这不要与PythonDecorators 混淆,后者是一种语言 动态修改函数或类的功能。
所以我猜你问题的答案是:
答案 1 :(得分:1)
您还可以在众所周知的Python decorator库文档中找到一些答案。
引用Introduction:
从技术上讲,任何可以用一个参数调用的Python对象都可以用作装饰器。但是,这个定义有点太大而无法真正有用。在两个子类中拆分泛型类的装饰器更方便:
签名保留装饰器:
可调用对象,它接受函数作为输入并将函数作为输出返回,具有相同的签名。
签名更改装饰器:
改变输入函数签名的装饰器,或返回不可调用对象的装饰器。
签名更改装饰器有其用途:例如,内置类staticmethod和classmethod都在此组中。它们接受函数并返回既不是函数也不是callables的描述符对象。
仍然,签名保留装饰器更常见,更容易推理。特别是,它们可以组合在一起,而其他装饰者通常不能。
同样的答案: