装饰器模式
装饰器模式解决什么问题?
- 增加新功能,且不改变原有功能和代码
- 选配,根据不同情况,动态调整功能
装饰器,顾名思义,就是用来装饰其他实物,增加被装饰物的功能而不改变被装饰物。这就像我们买车,同一款车型,有很多功能是选配的,但是车的核心功能不变。我们可以在购买时,根据需要选配不同的配置。
如何实现?
想象一下,你是一个装修工,如果要装饰一辆车,那么你首先需要有一辆车,而且在装饰过程中,你不能够改变车原有的功能(接口)。
如类图所示:
- 核心功能core和所有装饰器都必须实现interface接口
- 所有装饰器以组合的方式保存接口实例
class core: def some_action(): pass class decorator: def __init__(self,core): self.core = core def some_action(): .... self.core.some_action() .....
python 装饰器语法糖
装饰器太常用了,python专门的语法糖简化了装饰器的使用。最外层函数接收一个函数对象并返回内层函数,内层函数是正真的执行函数。
# 装饰器定义 def decorator(func): def wrapper(*args,**kwargs): ..... result = func(*args,**kwargs) .... return result return wrapper # 装饰器使用 @decorator def func(): pass
虽然形式变了,但是实质没有变:保存接口实例,实现相同的接口。
- 保存接口实例容易理解,因为传入了函数func对象。
- 实现相同的接口怎么理解?语法糖@xxxx的操作等价于
func = decorator(func)
,即将内层函数重命名了原函数名。
到此这篇关于python设计模式之装饰器模式的文章就介绍到这了,更多相关python装饰器内容请搜索<猴子技术宅>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<猴子技术宅>!
需要了解更多python教程分享python设计模式之装饰器模式,都可以关注python教程分享栏目—猴子技术宅(www.ssfiction.com)
本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ssfiction.com/pythons/1092017.html