python装饰器元信息丢失问题
使用装饰器可以大幅度提高代码的复用性,但是缺点就是原函数的元信息丢失了。
# 装饰器 def logged(func): def logging(*args, **kwargs): print(func.__name__) print(func.__doc__) func(*args, **kwargs) return logging # 函数 @logged def f(x): """函数文档,说明""" return x * x print(f.__name__) # 输出 logging print(f.__doc__) # 输出 None
解决办法非常简单,导入 from functools import wraps ,修改代码为下述内容:
from functools import wraps # 装饰器 def logged(func): @wraps(func) def logging(*args, **kwargs): print(func.__name__) print(func.__doc__) func(*args, **kwargs) return logging # 函数 @logged def f(x): """函数文档,说明""" return x * x print(f.__name__) # 输出 f print(f.__doc__) # 输出 函数文档,说明
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试