浅析Python装饰器以及装饰器模式

 更新时间:2018年05月28日 08:49:37   投稿:laozhang  
本篇文章给大家分享了关于Python装饰器以及装饰器模式的相关知识点,一起跟着小编学习下吧。

漫谈

如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变。

我以前也看过很多讲python 装饰器的文章,但是都是看了就忘。一方面是没有做太多的练习,二是对它的领会不是很深。

希望引以为戒!!!

郑传

装饰模式

如果你了解Java,你肯定听过 装饰器模式。在面向对象中,装饰模式指:动态地给一个对象添加一些额外的职责。就增加一些功能来说,装饰模式比生成子类更为灵活。

在设计模式学习----装饰器模式,我摘取了下面一段使用装饰器模式的代码

public class DecoratorPattern { 
 
  /** 
   * @param args the command line arguments 
*/ 
  public static void main(String[] args) { 
    // TODO code application logic here 
    Basket basket = new Original(); 
    //一个装饰的过程 
    Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket)));  
    myBasket.show(); 
  } 
}

等会注意下 Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket))) 这段的写法

在Python官方文档PythonDecorators 是这么介绍装饰器的

What is a Decorator
A decorator is the name used for a software design pattern. Decorators dynamically alter the functionality of a function, method, or class without having to directly use subclasses or change the source code of the function being decorated.

翻一下: 就是装饰器是一种软件设计模式,被用来动态修改函数、方法,或者类功能却不是通过子类,或者修改原代码实现。

跟之前是一个意思!!!

Python Decorator
而Python的装饰器与之不同,官方这么说:

The "decorators" we talk about with concern to Python are not exactly the same thing as the DecoratorPattern described above. A Python decorator is a specific change to the Python syntax that allows us to more conveniently alter functions and methods (and possibly classes in a future version). This supports more readable applications of the DecoratorPattern but also other uses as well.
Support for the decorator syntax was proposed for Python in PEP 318, and will be implemented in Python 2.4.

翻译下:Python的 decorators 与 DecoratorPattern并不完全相同。 Python的decorator是一种特殊:在语法上实现允许我们更灵活地更改方法,或者函数。

例子:

@classmethod
def foo (arg1, arg2):
  ....

记住这个特殊的语法,后面我们会展示这个强大的语法糖

相关文章

  • python实现半自动化发送微信信息

    python实现半自动化发送微信信息

    这篇文章主要为大家详细介绍了python实现半自动化发送微信信息,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python中unittest模块做UT(单元测试)使用实例

    Python中unittest模块做UT(单元测试)使用实例

    这篇文章主要介绍了Python中unittest模块做UT(单元测试)使用实例,本文直接给出待测试的类、测试类和测试结果以及测试总结,需要的朋友可以参考下
    2015-06-06
  • Python计算两个矩形重合面积代码实例

    Python计算两个矩形重合面积代码实例

    这篇文章主要介绍了Python 实现两个矩形重合面积代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • django 信号调度机制详解

    django 信号调度机制详解

    这篇文章主要介绍了django 信号调度机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python多进程(加入进程池)操作常见案例

    python多进程(加入进程池)操作常见案例

    这篇文章主要介绍了python多进程(加入进程池)操作,结合常见案例形式分析了Python多进程复制文件、加入进程池及多进程聊天等相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • 解决django跨域的问题小结(Hbuilder X)

    解决django跨域的问题小结(Hbuilder X)

    使用Django开发时,可能会遇到跨域问题,尤其是当后端与HbuilderX开发的前端结合使用时,解决此问题的关键步骤包括安装django-cors-headers库,并在Django的settings.py中进行相应配置,本文给大家介绍解决django跨域的问题小结,感兴趣的朋友一起看看吧
    2024-10-10
  • Python requests timeout的设置

    Python requests timeout的设置

    这篇文章主要介绍了Python requests timeout的设置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python使用pymongo操作mongo的完整步骤

    python使用pymongo操作mongo的完整步骤

    这篇文章主要给大家介绍了关于python使用pymongo操作mongo的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • Python中max函数用法实例分析

    Python中max函数用法实例分析

    这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Pycharm使用Conda激活环境失败的问题解决

    Pycharm使用Conda激活环境失败的问题解决

    本文主要介绍了Pycharm使用Conda激活环境失败的问题解决,文中主要介绍了两种问题的解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论