bases = [b.__module__ in ('__builtin__', 'builtins') and
u':class:`%s`' % b.__name__ or
u':class:`%s.%s`' % (b.__module__, b.__name__)
for b in self.object.__bases__]
self.add_line(u' ' + _(u'Bases: %s') % ', '.join(bases), sourcename)
# ClassDocumenter.add_directive_header uses ClassDocumenter.add_line to
# write the class documentation.
# We'll monkeypatch the add_line method and intercept lines that begin
# with "Bases:".
# In order to minimize the risk of accidentally intercepting a wrong line,
# we'll apply this patch inside of the add_directive_header method.
from sphinx.ext.autodoc import ClassDocumenter, _
add_line = ClassDocumenter.add_line
line_to_delete = _(u'Bases: %s') % u':class:`object`'
def add_line_no_object_base(self, text, *args, **kwargs):
if text.strip() == line_to_delete:
return
add_line(self, text, *args, **kwargs)
add_directive_header = ClassDocumenter.add_directive_header
def add_directive_header_no_object_base(self, *args, **kwargs):
self.add_line = add_line_no_object_base.__get__(self)
result = add_directive_header(self, *args, **kwargs)
del self.add_line
return result
ClassDocumenter.add_directive_header = add_directive_header_no_object_base
def skip_some_classes(app, what, name, obj, skip, options):
return skip or name in ('Class',) # define some better condition here
def setup(app):
app.connect('autodoc-skip-member', skip_some_classes)
4条答案
按热度按时间vcudknz31#
这实际上已经深深嵌入到
autodoc
源代码中,无法关闭:object
不做任何特殊处理;没有内置的方法将其从列表中排除。我能找到的最好的(自动)解决方案是monkeypatch autodoc。
将其添加到
conf.py
可实现所需的行为:xiozqbni2#
对于2022年6月和Sphinx v5.0.1,Aran-Fey的回答有点过时;在我的例子中,有效的解决方案是替换这一行:
用这个
lx0bsm1f3#
object
),您必须手动预处理每个类所做的工作就越多。如果你使用
autoclass
指令来记录类,就不要使用:show-inheritance:
选项。如果你使用automodule
来为所有模块成员生成文档,关闭:show-inheritance:
将不会有帮助,因为模块中的每个类都不会记录基类。因此,我将使用以下选项::show-inheritance:
,如下所示:autodoc-skip-member
钩子将Class
类从conf.py
中的模块automodule
文档中过滤出来:这样,除
Class
之外的所有模块成员都将使用:show-inheritance:
选项进行处理,而Class
则单独处理。0yycz8jy4#
对我来说,工作真的很简单的解决方案。
在
conf.py
中。