【发布时间】:2020-06-08 00:28:37
【问题描述】:
我想知道编写装饰器类以保留装饰函数的文档字符串的正确方法是什么。例如,考虑以下代码行:
import functools
class _vectorize:
""" (private) decorator to vectorize a function """
def __init__(self, func):
functools.update_wrapper(self, func)
self._func = func
def __call__(self, values, *args, **kwargs):
return [self._func(val, *args, **kwargs) for val in values]
@_vectorize
def multiply(v, s):
""" Multiplies all values in `v` by scalar `s`. """
return v*s
我希望客户端通过调用help(multiply) 来查看multiply 函数的文档字符串,但事实并非如此:
>>> help(multiply)
Help on instance of _vectorize in module docstring:
multiply = class _vectorize
| (private) decorator to vectorize a function
|
| Methods defined here:
|
| __call__(self, values, *args, **kwargs)
|
| __init__(self, func)
要查看正确的文档,必须直接打印__doc__ 属性:
>>> print(multiply.__doc__)
Multiplies all values in `v` by scalar `s`.
我应该如何修改装饰器以便help 打印所需的文档?
【问题讨论】:
-
在模块中使用
functools.wraps()或相关函数。
标签: python python-decorators docstring