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


Posted in Python onMay 28, 2018

漫谈

如果作为一个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 相关文章推荐
Python3中的真除和Floor除法用法分析
Mar 16 Python
对pandas中Series的map函数详解
Jul 25 Python
详解Django-auth-ldap 配置方法
Dec 10 Python
python移位运算的实现
Jul 15 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
python中sympy库求常微分方程的用法
Apr 28 Python
python两种注释用法的示例
Oct 09 Python
用python发送微信消息
Dec 21 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
Python实现科学占卜 让视频自动打码
Apr 09 Python
Python装饰器知识点补充
May 28 #Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 #Python
django manage.py扩展自定义命令方法
May 27 #Python
python实现windows下文件备份脚本
May 27 #Python
django 解决manage.py migrate无效的问题
May 27 #Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 #Python
解决Django migrate No changes detected 不能创建表的问题
May 27 #Python
You might like
输出控制类
2006/10/09 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
js数组去重的常用方法总结
2014/01/24 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
javascript包装对象实例分析
2015/03/27 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
python如何通过实例方法名字调用方法
2018/03/21 Python
Python3中详解fabfile的编写
2018/06/24 Python
python 寻找list中最大元素对应的索引方法
2018/06/28 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
Html5定位终极解决方案
2020/02/05 HTML / CSS
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
学生手册家长评语
2014/02/10 职场文书
本科毕业生自荐信
2014/06/02 职场文书
领导班子党的群众路线教育实践活动对照检查材料
2014/09/25 职场文书
校友回访母校寄语
2015/02/26 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python