Sphinx Autodoc从docstring中跳过成员

时间:2015-01-29 21:04:03

标签: python python-sphinx

我正在使用Sphinx记录一个类,并且想要跳过其中一个类成员:

class StatusUpdateAdapter(logging.LoggerAdapter):
    """
    """
    def __init__(self, status_update_func, logger, extra={}):
        """
        """
        pass

    def log(self, *args, **kwargs):
        pass

如何让sphinx不记录日志成员?我想在StatusUpdateAdapter中执行此操作,或者如果可能,请记录docstring。

5 个答案:

答案 0 :(得分:11)

您现在可以(从0.6版开始)使用:exclude-members:从文档中排除特定成员:

  

支持成员文档的指令也有   exclude-members选项,可用于排除单个成员名称   如果要记录所有成员,请从文档中获取。

     

版本0.6中的新功能。

来源:http://www.sphinx-doc.org/en/stable/ext/autodoc.html

在特定情况下,您可以将:exclude-members: log添加到.rst文件中。

答案 1 :(得分:4)

似乎没有任何简单的方法可以做到这一点。

作为一种解决方法,您可以在RST文件中尝试这样的操作:

.. autoclass:: StatusUpdateAdapter
   :members: methodA, methodB

但是这需要列出你想要手工记录的所有方法,这可能非常费力。如果你正在使用它,它也可能与:inherited-members:没有良好的互动。

另一种选择是将文档字符串放在要记录的每个方法上,但log()方法上没有文档字符串,然后(如果necessary)使用{{1} }。如果您计划记录内部接口或不记录公共接口,这显然没有用。

最后,除非另有配置(:no-undoc-members:),否则Autodoc会跳过名称以下划线开头的任何内容,因此如果使用下划线前缀名称,则不会显示该方法。 PEP 8下的下划线前缀indicates a private interface,可能与您的意图相符,也可能不符合您的意图。这也可能在已建立的代码库中产生向后兼容性问题。

答案 2 :(得分:1)

我不确定如何使用文档字符串来做到这一点,但是您可以使用下划线声明函数/方法“受保护”。 Sphinx不会引入该功能/方法。

def _log(self, *args, **kwargs):
     pass

答案 3 :(得分:0)

年份已经太晚了,但是一个丑陋的解决方法是将一个空的文档字符串添加到要跳过的公共方法中。这样:

def log(self, *args, **kwargs):
    ""
    pass

答案 4 :(得分:0)

您可以使用:meta private:,以便Sphinx将方法视为私有方法,如果将Sphinx配置为隐藏私有方法,则它将被隐藏。