为什么我不能得到文档字符串打印出来使用sphinx python包?



我使用Sphinx来记录我的函数。然而,它不读取我的文档字符串函数与装饰器。Sphinx将函数文档字符串替换为<The magic happens here>

我的函数是这样用装饰符编写的。如何让Sphinx检测函数中的doc字符串。

文件夹是这个格式

  • 项目
    • 功能——function.py
      • 文档
def wrap(pre, post):
""" Wrapper """
def decorate(func):
""" Decorator """
def call(*args, **kwargs):
""" The magic happens here """
pre(func)
result = func(*args, **kwargs)
post(func)
return result
return call
return decorate
def entering(func, *args):
""" Pre function logging """
logging.debug("Entered {}".format(func.__name__))
# logging.info(func.__doc__)
logging.debug("Function at line {} in {}".format(func.__code__.co_firstlineno, func.__code__.co_filename))
try:
logging.debug("The argument {} is {}".format(func.__code__.co_varnames[0], *args))
except IndexError:
logging.debug("No arguments")

def exiting(func):
""" Post function logging """
logging.debug("Exited {}".format(func.__name__))
@wrap(entering, exiting)
def function(a, b):
"""
Function to execute
:param a:
:param b:
:return: Sum of a+b
"""
return a+b

您需要您的decorate函数将文档字符串从func复制到call,然后返回它。否则Sphinx只能得到call的docstring,而不能得到原函数的docstring。

您可以通过直接执行call.__doc__ = func.__doc__来完成此操作,或者您可以使用标准库中的functools.wraps装饰器来为您完成此操作(默认情况下还会复制一些其他属性,并且可以自定义相当多)。

我尝试:

import functools
def wrap(pre, post):
""" Wrapper """
def decorate(func):
""" Decorator """
@functools.wraps(func)              # this copies over the docstring and more
def call(*args, **kwargs):
""" The magic happens here """
pre(func)
result = func(*args, **kwargs)
post(func)
return result
return call
return decorate

相关内容

  • 没有找到相关文章

最新更新