赞
踩
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
若使用Java实现,则类图如上图所示,这里不进行过多的介绍,本章主要介绍python中的装饰器。
在介绍python的装饰器之前,先了解一下python的函数,与Java不同的是,在python中一切皆对象,函数也是对象,可以进行赋值,可以作为参数,函数中还可以定义函数,也可以返回函数,看下四个例子:
例1:赋值
>>> # 定义了一个函数 >>> def rectangle(): ... print('draw a rectangle') ... >>> rectangle() draw a rectangle >>> # 将指向函数的变量rectangle赋值给变量draw >>> draw=rectangle >>> #此时,变量draw也指向方法所在的地址 >>> draw <function rectangle at 0x0000021406108D30> >>> draw() draw a rectangle >>> # 函数赋值时,rectangle后不能加括号,rectangle()代表执行函数,然后将返回值赋值给变量draw >>> draw=rectangle() draw a rectangle >>> type(draw) <class 'NoneType'> >>> # 删除变量rectangle并不会删除内存中的方法 >>> draw=rectangle >>> del rectangle >>> draw <function rectangle at 0x0000021406108D30> >>> rectangle() Traceback (most recent call last): File "<interactive input>", line 1, in <module> NameError: name 'rectangle' is not defined >>> draw() draw a rectangle
例2:将函数作为参数传递
>>> # 定义了一个函数
>>> def rectangle():
... print('draw a rectangle')
...
>>> # 定义一个函数,该函数的参数是另外一个函数
>>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。