Python 覆盖Sphinx autodoc“;“的别名”;用于导入私有类?
我有一个Python包,我正试图用sphinx autodoc记录它。我的python包有一个Python 覆盖Sphinx autodoc“;“的别名”;用于导入私有类?,python,python-sphinx,autodoc,Python,Python Sphinx,Autodoc,我有一个Python包,我正试图用sphinx autodoc记录它。我的python包有一个\uuuu init\uuuu.py文件,该文件从子模块中导入一个类,以便在包级别访问它 from a.b.c.d import _Foo as Foo __all__ = ["Foo"] 如果我这样做,我的(html)文档如下所示: a.b.c套餐 子模块 a.b.c.d模块 [a.b.c.d模块中无关公共类的snip文档] 模块内容 c模块 a、 b.c.Foo \u Foo
\uuuu init\uuuu.py
文件,该文件从子模块中导入一个类,以便在包级别访问它
from a.b.c.d import _Foo as Foo
__all__ = ["Foo"]
如果我这样做,我的(html)文档如下所示:
a.b.c套餐
子模块
a.b.c.d模块
[a.b.c.d模块中无关公共类的snip文档]
模块内容
c模块
a、 b.c.Foo
\u Foo的别名
因为\u Foo
是(正确的)未记录的,因为它是a.b.c.d子模块中的私有类,所以不是非常有用
我可以将以下内容添加到我的conf.py
中,以确保模块中的私有类定义得到记录
def skip(app, what, name, obj, skip, options):
if name == "_Foo":
return False
return skip
其他选择,但不是我尝试过的好东西:
a.b.c.d.\u Foo
重命名为a.b.c.d.Foo
(然后将导入从a.b.c.d import Foo更新为)——但随后我将该类记录了两次,一次记录在a.b.c.d模块标题下,另一次记录在模块内容标题下
a.b.c.d.Foo
重命名为a.b.c.d.MyFoo
,然后导入(从a.b.c.d导入MyFoo作为Foo
)会导致MyFoo
被记录,并且Foo
被列为MyFoo
的别名理想情况下,我希望私有定义保持未文档化,但将版本导入到包中并完全文档化。有人知道我是如何做到这一点的吗?斯芬克斯使用类的
\uuuu name\uuuuuuu
和\uuuuu模块\uuuuuuuuu
成员,以及类所有者的\uu模块\uuuuuuuuuuuuuu
成员来判断它是别名还是真品。通过显式设置这些成员,可以欺骗Sphinx,使其认为导入的类是真实的类
从a.b.c.d导入\u Foo作为Foo
Foo.\uuuuu模块\uuuuu=\uuuuuu名称__
Foo.\uuuuu name\uuuuuu='Foo'
使用members
指令,可以显示除以“\u”开头的成员以外的所有成员。您可以在a.b.c.d中将\u Foo
保留为未记录,并在a.b.c.d中将其记录为Foo
。我将从a.b.c.d导入\u Foo
作为导入,然后添加任何文档,如:
Foo = _Foo
''' blah blah blah '''
如果出于某种原因,您不想在a.b.c的命名空间中使用_Foo,那么您也可以这样做:
from a.b.c.d import _Foo as Foo
Foo = Foo
''' blah blah blah '''
如果执行此操作,则会中断inspect.getsource(Foo)
在conf.py
中的setup
函数中执行此操作,这样就不会弄乱原始源代码中的任何内容。例如: