当前位置:
首页 > 编程开发 > Python基础教程 >
-
python基础教程之采用__call__ 实现装饰器模式
本站最新发布 Python从入门到精通|Python基础教程
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
试听地址 https://www.xin3721.com/eschool/pythonxin3721/
装饰器模式在实现中也是很常见的:比如手机贴膜,手机壳 都是为了给手机增加一些额外功能 增加耐操
装饰器模式的本质就是对对象二次包装,赋额外功能
__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 哈哈 '''
栏目列表
最新更新
开发工具的安装与使用(第三弹)
采用__call__ 实现装饰器模式
抖音美女千千万,想用Python爬爬看
记录python上传文件的坑(2)
VS Code 之 Jupyter NoteBook 初试
python库的tkinter带你进入GUI世界(计算器简
关于django数据库迁移 以及显示未检测到更
Python爬虫:设置Cookie解决网站拦截并爬取
项目依赖包导出与导入
文件上传
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能
将Session值储存于SQL Server中