jzztf / wiki

wiki
https://jzztf.github.io
Other
1 stars 0 forks source link

py-mo-functools-wraps #39

Open jzztf opened 6 years ago

jzztf commented 6 years ago

functools模块中的wraps方法

参考: http://blog.csdn.net/hqzxsc2006/article/details/50337865

当定义装饰器时, 相当于将原函数换成了另一个, 会缺失其本身的"name","docstring"和其他一些信息. functools的"@wraps"本身也是装饰器传递了原函数的信息

不加@wraps的修饰器

@star def printer(msg): """printer docstring""" print(msg)

printer("hello world") print(printer.name) print(printer.doc)


- 输出:
```bash
******************************
hello world
******************************
add_star
None

添加@wraps后

def star(func): @wraps(func) def add_star(*args,*kargs): print(""30) func(args,*kargs) print(""*30) return add_star

@star def printer(msg): """printer docstring""" print(msg)

printer("hello world") print(printer.name) print(printer.doc)


- 输出:

```bash
******************************
hello world
******************************
printer
printer docstring