当前位置: 首页 > news >正文

python @wrap装饰器保留原函数__name__和__doc__属性

python @wrap装饰器保留原函数__name__和__doc__属性

不使用@wrap装饰器

def print_log(fn):def wrap(*args, **kwargs):'''这是包装函数:param args::param kwargs::return:'''print("before execute function")result = fn(*args, **kwargs)print("after execute function")return resultreturn wrap@print_log
def say_hello():'''这是say hello 函数:return:'''print('hello')if __name__ == '__main__':print(say_hello.__name__)print(say_hello.__doc__)

image

使用@wrap注解

from functools import wrapsdef print_log(fn):@wraps(fn)def wrap(*args, **kwargs):'''这是包装函数:param args::param kwargs::return:'''print("before execute function")result = fn(*args, **kwargs)print("after execute function")return resultreturn wrap@print_log
def say_hello():'''这是say hello 函数:return:'''print('hello')if __name__ == '__main__':print(say_hello.__name__)print(say_hello.__doc__)

image