'''
高级一点的装饰器
- 带参数的装饰器
- 基于类实现的装饰器
- 带参数的类装饰器
''''*** 带参数的装饰器 ***'# encoding: utf-8import os
import sys
deflogging(level):defwrapper(func):definner_wrapper(*args,**kwargs):print"[{level}]: enter function {func}()".format(level=level,func=func.__name__)return func(*args,**kwargs)return inner_wrapper
return wrapper
@logging(level='INFO')defsay(something):print"say {}!".format(something)# 如果没有使用@语法,等同于# say = logging(level='INFO')(say)
@logging(level='DEBUG')defdo(something):print"do {}...".format(something)if __name__ =='__main__':
say('hello 10086')
do("my work")************************************
输出结果:
[INFO]: enter function say()
say hello 10086!
[DEBUG]: enter function do()
do my work...************************************
'*** 基于类实现的装饰器 ***'# encoding: utf-8import os
import sys
classlogging(object):def__init__(self, func):
self.func = func
def__call__(self,*args,**kwargs):print"[DEBUG]: enter function {func}()".format(
func=self.func.__name__)return self.func(*args,**kwargs)
@logging
defsay(something):print"say {}!".format(something)if __name__ =='__main__':
say('hello 10086')************************************
输出结果:
[DEBUG]: enter function say()
say hello 10086!
************************************
'*** 带参数的类装饰器 ***'# encoding: utf-8import os
import sys
classlogging(object):def__init__(self, level='INFO'):
self.level = level
def__call__(self, func):# 接受函数defwrapper(*args,**kwargs):print"[{level}]: enter function {func}()".format(
level=self.level,
func=func.__name__)
func(*args,**kwargs)return wrapper #返回函数
@logging(level='DEBUG')defsay(something):print"say {}!".format(something)if __name__ =='__main__':
say('hello 10086')************************************
输出结果:
[DEBUG]: enter function say()
say hello 10086!
************************************