使用下面的源代码,我想生成函数中定义的类foo的文档。
# module named rubbish.py
def factory():
class foo:
def bar(self):
'''bar
'''
pass
相应的第一个文件看起来如此
rubbish module
==============
.. automodule:: rubbish
:members:
:undoc-members:
:show-inheritance:
并且不会生成类文档。生成的html仅显示factory()。
是否有任何指示来记录课程?
答案 0 :(得分:0)
我设法以一种大概的方式做到了这一点,但它似乎奏效了。
my_module.py:
# here lies the class factory
def foo_factory():
class Foo:
'''My Foo class is cool'''
def __init__(self):
'''Init a Foo
Params
------
etc..
'''
pass
def bar(self):
'''do a bar!
Params
------
etc..
'''
return 1+1
foo_factory.class_example = Foo # <--Note A.1
将以下内容添加到您的 sphinx conf.py:
def setup(app):
import my_module
example = my_module.foo_factory() # <-- Note A.2
my_module.Foo = my_module.foo_factory.class_example # <--Note A.3
my_module.Foo.__name__ = 'Foo'# <--Note B.1
my_module.Foo.__module__ = 'my_module' # <--Note B.2
添加到您的模块 rst 文件(应显示文档类的位置):
.. autoclass:: Foo
:members:
A.1 使类可以在本地 (foo_factory) 范围之外访问
A.2 只有在调用工厂后才能访问它,所以我们在这里“虚拟”调用它。
灵感:https://stackoverflow.com/a/12039980/4996681
A.3 将该类添加为模块的属性
B
在完成 A 中的步骤(并将类添加到 rst 文件)后,sphinx 确实将类添加到文档中,但它显示为“my_module.foo_factory.<locals>.Foo
的别名”。
为了覆盖别名,我们愚弄了 sphinx 认为该类是您模块中直接的一个类。