您的位置:首页 > 编程语言 > Python开发

python 9-2 如何为被装饰的函数保存元数据,使用标准库functools中的装饰器wraps 装饰内部包裹函数

2017-01-29 10:54 821 查看
9-2 如何为被装饰的函数保存元数据

解决方案:

使用标准库functools中的装饰器wraps 装饰内部包裹函数,可以

制定将原函数的某些属性,更新到包裹函数的上面

其实也可以通过

wrapper.name = func.name

update_wrapper(wrapper, func, (‘name‘,’doc‘), (‘dict‘,))

f.name 函数的名字

f.doc 函数文档字符串

f.module 函数所属模块名称

f.dict 函数的属性字典

f.defaults 默认参数元组

f.closure 函数闭包

from functools import wraps,update_wrapper
def log(level="low"):
def deco(func):
@wraps(func)
def wrapper(*args,**kwargs):
''' I am wrapper function'''
print "log was in..."
if level == "low":
print "detailes was needed"
return func(*args,**kwargs)
#wrapper.__name__ = func.__name__
#update_wrapper(wrapper, func, ('__name__','__doc__'), ('__dict__',))
return wrapper
return deco

@log()
def myFunc():
'''I am myFunc...'''
print "myFunc was called"

print myFunc.__name__
myFunc()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: