装饰器模式在实现中也是很常见的:比如手机贴膜,手机壳 都是为了给手机增加一些额外功能 增加耐操

装饰器模式的本质就是对对象二次包装,赋额外功能

__call__

__call__是python魔术方法——可调用对象,指的是可以实现一个对象实例以函数的方式来调用。

class Test:
def __call__(self, *args, **kws):
print(*args, **kws) t = Test() t("你好","hello word")

无参数装饰器

现在有一个out函数,用于打印输出。现在要想要统计这函数执行了多少次

class Count:
def __init__(self,func):
self.func = func
self.i = 0 def __call__(self,*args,**kws):
self.i += 1
print(f"执行次数:{self.i}")
return self.func(*args,**kws) @Count
def out(s):
print(s) out("你好")
out("呵呵") '''
相当于
out = Count(out)   
out()
把函数传入Count类中,创建对象实例 然后利用__call__魔术方法实现执行可调用对象
'''

有参数装饰器

现在Count类有一个属性color,给统计数值上颜色。

class Count:
def __init__(self, color):
self.color = color
self.i = 0 def __call__(self, func):
self.func = func
return self.__callback def __callback(self, *args, **kw):
self.i += 1
print(f"执行次数:{self.color} {self.i}")
return self.func(*args, **kw) @Count("红色") # 接收参数
def test(s):
print(s) test("哈哈") '''
等价于
d = Count("红色")
test = d(test)
test("哈哈")
'''
test("哈哈")
test("哈哈") ''' 输出
执行次数:红色 1
哈哈
执行次数:红色 2
哈哈
执行次数:红色 3
哈哈
'''

最新文章

  1. s3c2440液晶屏驱动 (内核自带) linux-4.1.24
  2. 【python】pickle模块
  3. linux下history命令显示历史指令记录的使用方法
  4. 一个简单的web服务器
  5. Yii框架,在页面输出执行sql语句,方便调试
  6. js继承关系
  7. -_-#【Dom Ready / Dom Load】
  8. HTML5事件——contextmenu 隐藏鼠标右键菜单
  9. ajax + php + Controller 控制所有后台函数调用
  10. Oracle Database 12c Release 1 Installation On Oracle Linux 6.4 x86_64
  11. From Ontology to Semantic Web
  12. java 课程设计 购物车系统 个人
  13. Dynamics CRM 2011/2013 section的隐藏
  14. vscode git
  15. redis5.0.4 集群搭建
  16. k64 datasheet学习笔记1---概述
  17. UWP开发细节记录:WRL::ComPtr 的坑
  18. MyBatis实战之解析与运行
  19. Applying the Kappa architecture in the telco industry
  20. 20145331魏澍琛《网络对抗》Exp2 后门原理与实践

热门文章

  1. CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置)
  2. 微信小程序图片宽度100%,高度自适应
  3. RunTime.getRunTime().addShutdownHook的用法
  4. ContentProvider数据库共享之——实例讲解
  5. Error-ASP.NET:未能加载文件或程序集“CMSCalendar”或它的某一个依赖项。系统找不到指定的文件。
  6. Oracle系列十三 视图
  7. Django入门2开发工具pycharm的配置
  8. (mysql)找不到请求的.Net Framework Data Provider。可能没有安装
  9. 使用 atom 将 makedown 编辑并转换成 pdf
  10. C#实体类null自动转空字符串