浅析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 相关文章推荐
详解Python验证码识别
Jan 25 Python
详解Python的Twisted框架中reactor事件管理器的用法
May 25 Python
Python基于回溯法子集树模板解决全排列问题示例
Sep 07 Python
对Python3中的input函数详解
Apr 22 Python
python实现随机梯度下降法
Mar 24 Python
图解python全局变量与局部变量相关知识
Nov 02 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
解决python调用自己文件函数/执行函数找不到包问题
Jun 01 Python
Python gevent协程切换实现详解
Sep 14 Python
python中绕过反爬虫的方法总结
Nov 25 Python
python 邮件检测工具mmpi的使用
Jan 04 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php session劫持和防范的方法
2013/11/12 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
IE与Firefox在JavaScript上的7个不同句法分享
2011/10/30 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
利用Node.js批量抓取高清妹子图片实例教程
2018/08/02 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
vuex入门最详细整理
2020/03/04 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[48:12]Secret vs Optic Supermajor 胜者组 BO3 第三场 6.4
2018/06/05 DOTA
Python 实现链表实例代码
2017/04/07 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
python实现二分查找算法
2020/09/18 Python
Python 实现一个简单的web服务器
2021/01/03 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
wedgwood加拿大官网:1759年成立的英国国宝级陶瓷餐具品牌
2018/07/17 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
校车安全管理责任书
2015/05/11 职场文书
人民调解协议书
2016/03/21 职场文书
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技