时间:2022-11-30 10:57:51 | 栏目:Python代码 | 点击:次
装饰器模式解决什么问题?
装饰器,顾名思义,就是用来装饰其他实物,增加被装饰物的功能而不改变被装饰物。这就像我们买车,同一款车型,有很多功能是选配的,但是车的核心功能不变。我们可以在购买时,根据需要选配不同的配置。
如何实现?
想象一下,你是一个装修工,如果要装饰一辆车,那么你首先需要有一辆车,而且在装饰过程中,你不能够改变车原有的功能(接口)。

如类图所示:
class Core:
def some_action():
pass
class Decorator:
def __init__(self,core):
self.core = core
def some_action():
....
self.core.some_action()
.....
装饰器太常用了,python专门的语法糖简化了装饰器的使用。最外层函数接收一个函数对象并返回内层函数,内层函数是正真的执行函数。
# 装饰器定义
def decorator(func):
def wrapper(*args,**kwargs):
.....
result = func(*args,**kwargs)
....
return result
return wrapper
# 装饰器使用
@decorator
def func():
pass
虽然形式变了,但是实质没有变:保存接口实例,实现相同的接口。
func = decorator(func),即将内层函数重命名了原函数名。