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免费测试