python设计模式之装饰器模式

 更新时间:2022年05月11日 08:44:15   作者:​ 图图加油   ​  
这篇文章主要介绍了python设计模式之装饰器模式,文章基于python得设计模式资料展开饰器模式得详细资料,具有一定的参考价值,需要的小伙伴可以参考一下

装饰器模式

装饰器模式解决什么问题?

  • 增加新功能,且不改变原有功能和代码
  • 选配,根据不同情况,动态调整功能

装饰器,顾名思义,就是用来装饰其他实物,增加被装饰物的功能而不改变被装饰物。这就像我们买车,同一款车型,有很多功能是选配的,但是车的核心功能不变。我们可以在购买时,根据需要选配不同的配置。

如何实现?

想象一下,你是一个装修工,如果要装饰一辆车,那么你首先需要有一辆车,而且在装饰过程中,你不能够改变车原有的功能(接口)。

如类图所示:

  • 核心功能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中global语句下全局变量的值的修改

    实例讲解Python中global语句下全局变量的值的修改

    global是Python中的一个关键字用来,声明一个局部变量为全局变量,这里我们来以实例讲解Python中global语句下全局变量的值的修改,需要的朋友可以参考下.
    2016-06-06
  • Python实现数据结构线性链表(单链表)算法示例

    Python实现数据结构线性链表(单链表)算法示例

    这篇文章主要介绍了Python实现数据结构线性链表(单链表)算法,结合实例形式分析了Python单链表的定义、节点插入、删除、打印等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • 浅谈Python中的模块

    浅谈Python中的模块

    这篇文章主要介绍了Python中的模块相关知识,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • python使用OpenCV实现多目标跟踪

    python使用OpenCV实现多目标跟踪

    这篇文章主要介绍了python使用OpenCV实现多目标跟踪,如何在OpenCV中使用MultiTracker类实现多目标跟踪API。在深入了解详细信息之前,请查看下面列出的关于目标跟踪的帖子,以了解在OpenCV中实现的单个目标跟踪器的基础知识,需要的朋友可以参考一下
    2022-04-04
  • python动态性强类型用法实例

    python动态性强类型用法实例

    这篇文章主要介绍了python动态性强类型用法,对比C#实例分析了python动态性强类型的使用方法,需要的朋友可以参考下
    2015-05-05
  • Pycharm安装各种库(第三方库)的两种方法

    Pycharm安装各种库(第三方库)的两种方法

    这篇文章主要给大家介绍了关于Pycharm安装各种库(第三方库)的两种方法,Pycharm中通常需要安装很多第三方库,才可以使用相应的拓展功能,需要的朋友可以参考下
    2024-01-01
  • PyTorch 对应点相乘、矩阵相乘实例

    PyTorch 对应点相乘、矩阵相乘实例

    今天小编就为大家分享一篇PyTorch 对应点相乘、矩阵相乘实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • python神经网络Xception模型复现详解

    python神经网络Xception模型复现详解

    这篇文章主要为大家介绍了python神经网络Xception模型复现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python 200行代码实现一个滑动验证码过程详解

    Python 200行代码实现一个滑动验证码过程详解

    这篇文章主要介绍了Python 200行代码实现一个滑动验证码过程详解,各种各样的验证码,比较高级的有滑动、点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大致说明下这些验证码的原理以及带大家实现一个滑动验证码
    2019-07-07
  • 在Python的Flask框架中使用模版的入门教程

    在Python的Flask框架中使用模版的入门教程

    这篇文章主要介绍了在Python的Flask框架中使用模版的入门教程,模版的使用是Flask使用当中的基础,需要的朋友可以参考下
    2015-04-04

最新评论