32

我想使用sphinx 的 autodoc-skip-member事件来选择某个 python 类上的一部分成员进行文档。

但是从 sphinx 文档中并不清楚,我找不到任何示例来说明:我在哪里放置代码来连接它?我看到Sphinx.connect并且我怀疑它在我的 conf.py 中,但是当我在 conf.py 中尝试此代码的变体时,我找不到我应该连接()的应用程序对象:

def maybe_skip_member(app, what, name, obj, skip,
                                  options):
    print app, what, name, obj, skip, options
    return False

# This is not even close to correct:
#from sphinx.application import Sphinx
#Sphinx().connect('autodoc-skip-member', maybe_skip_member)

指向一个简单示例的指针将是理想的。

4

3 回答 3

46

啊哈,在谷歌搜索上的最后努力出现了这个例子,向下滚动到底部。显然 conf.py 中的 setup() 函数将被应用程序调用。我能够在 conf.py 的底部定义以下内容:

def maybe_skip_member(app, what, name, obj, skip, options):
    print app, what, name, obj, skip, options
    return True

def setup(app):
    app.connect('autodoc-skip-member', maybe_skip_member)

这显然是无用的(它跳过了所有内容),但这是我正在寻找但找不到的最小示例......

于 2010-09-21T05:28:07.170 回答
16

这个答案扩展了bstpierre 的答案。它实现autodoc-skip-member. 以下是我的相关部分conf.py

autodoc_default_flags = ['members', 'private-members', 'special-members',
                         #'undoc-members',
                         'show-inheritance']

def autodoc_skip_member(app, what, name, obj, skip, options):
    # Ref: https://stackoverflow.com/a/21449475/
    exclusions = ('__weakref__',  # special-members
                  '__doc__', '__module__', '__dict__',  # undoc-members
                  )
    exclude = name in exclusions
    # return True if (skip or exclude) else None  # Can interfere with subsequent skip functions.
    return True if exclude else None
 
def setup(app):
    app.connect('autodoc-skip-member', autodoc_skip_member)
于 2014-01-30T06:36:51.893 回答
2

如果有人来搜索相同的问题,但AutoAPI_而不是 autodoc,下面的代码片段成功地从 AutoAPI 生成的文档中排除了所有以;开头的属性和方法。这在实践中不是一个好主意,但我想从一些激进的东西开始,以便于检测。

def autoapi_skip_member(app, what, name, obj, skip, options):
    """Exclude all private attributes, methods, and dunder methods from Sphinx."""
    import re
    exclude = re.findall('\._.*', str(obj))
    return skip or exclude


def setup(app):
    """Add autoapi-skip-member."""
    app.connect('autoapi-skip-member', autoapi_skip_member)

需要指出的一个怪癖/奇怪之处是,应用于name而不是str(obj)在函数中的相同函数autoapi_skip_member似乎不起作用,我(显然)错误地认为这是同一件事(“对象的完全限定名称”根据 AutoAPI 文档)。

这包括在投入类似下面的内容来检测以 开头的方法时_

or (hasattr(obj, '__name__') and str(obj.__name__).startswith('_'))
于 2020-12-31T04:15:02.110 回答