python Sphinx Autodoc跳过文档字符串中的成员

pexxcrt2  于 2023-01-16  发布在  Python
关注(0)|答案(6)|浏览(159)

我正在用Sphinx编写一个类,simple希望跳过其中一个类成员:

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

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

我怎样才能使sphinx不记录日志成员?如果可能的话,我希望在StatusUpdateAdapter或日志文档字符串中完成此操作。

f0ofjuux

f0ofjuux1#

现在(从0.6版开始)可以使用:exclude-members:从文档中排除特定成员:
支持成员文档的指令还有一个exclude-members选项,如果要记录所有成员,则可以使用该选项从文档中排除单个成员名称。
版本0.6中的新增功能。
来源:http://www.sphinx-doc.org/en/stable/ext/autodoc.html
在您的特定情况下,可以将:exclude-members: log添加到.rst文件中。

nr7wwzry

nr7wwzry2#

似乎没有任何简单的方法来做到这一点。
作为一种解决方法,您可以在RST文件中尝试类似以下的操作:

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

但是这需要列出所有你想手工记录的方法,这可能是相当费力的,而且如果你使用:inherited-members:的话,它也可能不能很好地与:inherited-members:交互。
另一种选择是在你想要记录的 every 方法上放置一个docstring,但是在log()方法上不放置docstring,然后(如果必要的话)使用:no-undoc-members:,如果你打算记录你的内部接口或者不记录你的公共接口,这显然是不好的。
最后,除非另外配置(:private-members:),否则Autodoc会跳过名称以下划线开头的任何内容,因此如果您使用下划线前缀的名称,该方法将不会出现。下划线前缀表示PEP 8下的私有接口,这可能与您的意图匹配,也可能不匹配。这也会在已建立的代码库中产生向后兼容性问题。

cgfeq70w

cgfeq70w3#

我不知道如何用docstring来做这件事,但是你可以用一个前置下划线声明函数/方法'protected',Sphinx不会把这个函数/方法拉进来。

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

b09cbbtk4#

您可以使用:meta private:,这样Sphinx就可以将该方法视为私有方法,并且如果您将Sphinx配置为隐藏私有方法,则该方法将被隐藏。

643ylb08

643ylb085#

有一个类似的问题,并考虑到(甚至)截至今天似乎没有这样的功能,我发现了一个变通的选择,为我工作:在conf.py中创建自定义autodoc-skip-member()函数。
这允许根据一些输入(包括对象类型、对象名称和对象本身)定义何时跳过成员。
请参阅此问题了解更多详细信息:Connect Sphinx autodoc-skip-member to my function,特别是this答案(返回None允许Sphinx对未显式排除的成员使用默认行为)。

daolsyd0

daolsyd06#

虽然已经晚了很多年,但是一个丑陋的变通方法是在你想跳过的公共方法中添加一个空的文档字符串,比如:

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

相关问题