我设法以一种大概的方式做到了这一点,但它似乎奏效了。
代码
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 认为该类是直接在您的模块中的类。
灵感来源:https://stackoverflow.com/a/58982001/4996681