python 9-5 如何在类中定义装饰器,在包裹函数中就可以持有实例对象,便于修改属性和功能
来源:互联网 发布:it 域名 编辑:程序博客网 时间:2024/05/29 03:17
9-5 如何在类中定义装饰器
解决方案:
为了让装饰器在使用上更加灵活,可以把类的实例方法作为装饰器
此时在包裹函数中就可以持有实例对象,便于修改属性和功能
import loggingfrom time import localtime,time,strftime,sleepclass CallingInfo(object): def __init__(self,name): log = logging.getLogger(name) log.setLevel(logging.INFO) fh = logging.FileHandler(name + '.log') log.addHandler(fh) log.info("start...".center(50,'-')) self.log = log self.formatter = '%(func)s ->[%(time)s - %(used)s - %(ncalls)s -]' def info(self,func): def wrapper(*args,**kwargs): wrapper.ncalls += 1 lt = localtime() start = time() res = func(*args,**kwargs) used = time() - start info = {} info['func'] = func.__name__ info['time'] = strftime('%x %X',lt) info['used'] = used info['ncalls'] = wrapper.ncalls msg = self.formatter % info self.log.info(msg) return res wrapper.ncalls = 0 return wrapper def setFormater(self,formatter): self.formatter = formatter def turnOn(self): log.setLevel(logging.INFO) def turnOff(self): self.log.setLevel(logging.WARN)cinfo1 = CallingInfo('mylog1')cinfo2 = CallingInfo('myLog2')cinfo1.setFormater('%(func)s ->[%(time)s - %(used)s - %(ncalls)s -]')cinfo2.turnOff()@cinfo1.infodef f(): print "in f"@cinfo1.infodef g(): print 'in g'@cinfo2.infodef h(): print 'in h'from random import choicefor _ in xrange(50): choice([f,g,h])() sleep(choice([0.5,1,1.5]))
0 0
- python 9-5 如何在类中定义装饰器,在包裹函数中就可以持有实例对象,便于修改属性和功能
- python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
- 在js对象中定义属性和方法的实例。
- 类定义中持有对象
- Python在类中定义Decorator装饰器
- 9-5在类中定义装饰器
- 如何在unity3d中实现AR镜头全包裹和AR镜头不包裹效果
- 在javascript中添加、修改或者删除对象实例的属性和方法
- python中装饰器的使用和类装饰器在类中方法的使用
- 什么时候可以不用实例化对象就可以调用类中成员函数
- 在javaScript对象字面量中定义访问器属性
- 大数组定义在main函数中不能执行,为什么将其定义为全局变量就可以执行?
- iOS 自定义类,使其可以在IB中渲染,并在inspector中修改属性
- 在ECSHOP用户中添加包裹跟踪功能
- 在Python中定义和使用 抽象类及抽象方法 抽象属性
- c++中为什么函数定义可以在主函数后面而类的定义不可以?
- 如何在H2数据库中定义函数
- python 9-2 如何为被装饰的函数保存元数据,使用标准库functools中的装饰器wraps 装饰内部包裹函数
- CCF201312-2 ISBN号码(100分)
- 【9934】选课
- 操作符
- C语言上课笔记:\n与\t
- python 9-4 如何实现属性可修改的函数装饰器,python3 nolocal或者在python2中列表方式
- python 9-5 如何在类中定义装饰器,在包裹函数中就可以持有实例对象,便于修改属性和功能
- Android开发入门——推箱子游戏开发实战(十三)
- eclipse写slorj的艰难开始
- Python学习笔记02_list和tuple
- Leetcode 61. Rotate List
- React&Redux
- Leetcode 62. Unique Paths
- 习题九
- 2048小游戏