浅析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实现把xml或xsl转换为html格式
Apr 08 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python利用字典将两个通讯录文本合并为一个文本实例
Jan 16 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
详解python读取和输出到txt
Mar 29 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
python-jwt用户认证食用教学的实现方法
Jan 19 Python
python上下文管理器异常问题解决方法
Feb 07 Python
详解Python小数据池和代码块缓存机制
Apr 07 Python
详解python网络进程
Jun 15 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
天津市收音机工业发展史
2021/03/04 无线电
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
判断用户是否在线的代码
2011/03/05 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
浅谈angular4 ng-content 中隐藏的内容
2017/08/18 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
2020/06/05 Javascript
Python中列表(list)操作方法汇总
2014/08/18 Python
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
每天迁移MySQL历史数据到历史库Python脚本
2018/04/13 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
python使用Matplotlib画条形图
2020/03/25 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
Java面试笔试题大全
2016/11/23 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技