笔记如何为被装饰的函数保存元数据

Posted banshaohuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记如何为被装饰的函数保存元数据相关的知识,希望对你有一定的参考价值。

在函数对象中保存着一些函数的元数据,例如:

  f.__name__    :  函数的名字

  f.__doc__       :  函数文档字符串

  f.__moudle__  :  函数所属模块名

  f.__dict__    : 属性字典

  f.__defaults__  : 默认参数元组

使用装饰器后,再使用上面这些属性访问时,看到的是内部包裹函数的元数据,原来的元数据便丢掉了。

解决方案:使用标准库functools中的装饰器wraps装饰内部包裹函数,可以定制将原函数的某些属性,更新到包裹函数上面

 1 # coding:utf8
 2 from functools import wraps
 3 def mydecorator(func):
 4     @wraps(func)
 5     def wrapper(*args,**kargs):
 6         ‘‘‘wrapper function‘‘‘
 7         print In wrapper
 8         func(*args,**kargs)
 9     return wrapper
10 
11 @mydecorator    
12 def example():
13     ‘‘‘example function‘‘‘
14     print In example
15     
16     
17 print example.__name__
18 print example.__doc__

 

以上是关于笔记如何为被装饰的函数保存元数据的主要内容,如果未能解决你的问题,请参考以下文章

python_为被装饰的函数保留元数据

如何为每个片段保存一个变量值以重用它? [关闭]

如何为元数据编号版本

Python笔记·第十一章—— 函数 装饰器

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

python使用上下文对代码片段进行计时,非装饰器