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装饰器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Tkinter中复选菜单是否被选中的判断与设置方式

    Tkinter中复选菜单是否被选中的判断与设置方式

    这篇文章主要介绍了Tkinter中复选菜单是否被选中的判断与设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python中Numpy模块使用详解

    Python中Numpy模块使用详解

    这篇文章主要介绍了Python中Numpy模块使用详解,NumPy是Python 的一个扩展程序库,支持大量的维度数组与矩阵运算。更多相关内容需要的朋友可以参考一下
    2022-07-07
  • 详解python变量的命名和使用

    详解python变量的命名和使用

    变量名只能包含字母、数字和下划线,本文主要介绍了详解python变量的命名和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • 基于Python开发高效文件搜索与内容匹配工具

    基于Python开发高效文件搜索与内容匹配工具

    在日常的开发和办公中,查找和筛选特定文件或文件内容的需求十分常见,本文将基于PyQt6开发一个文件搜索工具,有需要的小伙伴可以参考一下
    2025-03-03
  • pyautogui自动化控制鼠标和键盘操作的步骤

    pyautogui自动化控制鼠标和键盘操作的步骤

    这篇文章主要介绍了pyautogui自动化控制鼠标和键盘操作的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用Python和Prometheus跟踪天气的使用方法

    使用Python和Prometheus跟踪天气的使用方法

    这篇文章主要介绍了使用Python和Prometheus跟踪天气的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 浅谈Pandas Series 和 Numpy array中的相同点

    浅谈Pandas Series 和 Numpy array中的相同点

    今天小编就为大家分享一篇浅谈Pandas Series 和 Numpy array中的相同点,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python 2.7中文显示与处理方法

    Python 2.7中文显示与处理方法

    今天小编就为大家分享一篇Python 2.7中文显示与处理方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python GUI编程之tkinter模块Toplevel控件实现搭建父子窗口

    Python GUI编程之tkinter模块Toplevel控件实现搭建父子窗口

    这篇文章主要介绍了Python使用tkinter模块Toplevel控件搭建父子窗口的实现方法,Tkinter是Python的标准GUI库,Python使用Tkinter可以快速的创建GUI应用程序,用到相关控件的同学可以参考下
    2023-12-12
  • python中__slots__节约内存的具体做法

    python中__slots__节约内存的具体做法

    在本篇内容里小编给大家分享的是一篇关于python中__slots__节约内存的具体做法,有需要的朋友们可以跟着学习参考下。
    2021-07-07

最新评论