sphinx autodoc
有一个官方已知的问题,当您对函数进行修饰时,其文档字符串将不会显示在生成的文档中。
如果要记录修饰的函数或方法,请记住,自动文档通过导入模块并检查给定函数或方法的 doc 属性来检索其文档字符串。从Python 2.5开始,functools.wraps()可用于创建行为良好的装饰函数。
因此,使用functools.wraps()
确实可以。
def decorator_func(say_hello_func):
"""Docstring for decorator_func"""
@wraps(say_hello_func)
def wrapper_func(hello_var, world_var):
"""Docstring for wrapper_func"""
return say_hello_func(hello_var, world_var)
return wrapper_func
@decorator_func
def say_hello(hello_var, world_var):
"""Docstring for say_hello function.
Args:
hello_var (str): hello_var
world_var (str): world_var
Returns:
str: concatenation of the strings
"""
print hello_var + " " + world_var
制作(粘贴格式不正确)
say_hello(hello_var, world_var)
Docstring for say_hello function.
Parameters:
· hello_var (str) – hello_var
· world_var (str) – world_var
Returns:
concatenation of the strings
Return type:
str
但是,在某些情况下,您拥有第三方包装,可以从中获得装饰。但是,修改软件包的源代码并在源代码的各处添加functools.wraps()
是不切实际的-至少在下一次更新此软件包后,您所做的工作就会消失。
是否有其他解决方案,不涉及修改从中获取装饰器的第3方程序包(例如Django)的源代码?
一个简单的例子可能像这样。除非您转到Django的源代码并在其中添加save
,否则@wraps
函数的文档字符串不会被拉出。
from django.db import transaction
@transaction.atomic
def save(self):
"""Docstring to be used"""
pass