Sphinx python:autodoc不导入在其他源文件中定义的类方法
在我的项目中,我在Sphinx python:autodoc不导入在其他源文件中定义的类方法,python,python-sphinx,autodoc,Python,Python Sphinx,Autodoc,在我的项目中,我在EnergyModel.py中定义了一个类EnergyModel。还有从另一个源文件导入的generate_dataclass方法: #energy_model.py from .energy_model_data_generation import generate_data class EnergyModel(BaseEstimator): def __init__(...): EnergyModel.generate_data=generate_
EnergyModel.py
中定义了一个类EnergyModel
。还有从另一个源文件导入的generate_data
class方法:
#energy_model.py
from .energy_model_data_generation import generate_data
class EnergyModel(BaseEstimator):
def __init__(...):
EnergyModel.generate_data=generate_data
还有另一个定义方法的源文件:
#energy_model_data_generation.py
def generate_data(self, ...):
...
我将方法分为不同的源文件,以保持文件足够小-这对我来说很方便。现在,我想用Sphinx生成类文档。我的实现.rst
如下所示:
Implementation
==============
.. _Energymodel_class:
Energymodel class
-----------------
.. autoclass:: neuralflow.EnergyModel
:members:
其中neuralflow是包的名称(在conf.py
中导入)。这不会为generate_data
方法生成文档。我没有找到如何包含它,我只找到了如何交叉引用方法,这不是我想要的
编辑:在我的目录中还有一个\uuuu init\uuuuuu.py
文件和源文件,因此它是一个包。看起来是这样的:
from .energy_model import EnergyModel
# Also import other modules/packages that are not part of EnergyModel class
__all__ = ['EnergyModel', ...(other stuff that are not part of EnergyModel)]
此外,我还将根目录添加到conf.py文件的路径中,问题是
generate_data()
方法被动态添加到构造函数中的类中。因为Sphinx nevers调用构造函数(正如@mzjn指出的),所以当Sphinx构建文档时,这个方法不是类的一部分。解决方案是在类级别定义方法:
导入能量\u模型\u生成为肌电图
类别能量模型(基本估算器):
生成\u数据=肌电图。生成\u数据
由于更多的是代码审阅类型的注释,在构造函数中动态创建这样的方法是没有意义的。方法应该只定义一次,但构造函数可以为类的每个实例调用多次。很容易想象这是不明bug的来源。您的源代码是否在Python包中?在包含名为
\uuu init\uuuu.py
的文件的目录中?在conf.py
中,您的包是否也在您的路径中?我不知道这是如何工作的。导入了带有EnergyModel
类的模块,但未实例化该类。Sphinx能够从\uuuuu init\uuuuu()
中提取docstring,但是\uuuuuuu init\uuuuuu()
没有实际执行。@StevePiercy,yes,yes。我已经对我的帖子进行了编辑。@mzjn所以唯一可行的方法就是将所有方法放在一个源文件中?是否可以(如在cpp中)在souce文件中声明成员,但将实际实现放在其他文件中?谢谢您的回答。我刚刚检查过-它可以工作,autodoc可以识别以这种方式引入的方法。你能澄清一下代码审查部分吗?你是说我介绍会员的方式不好,我应该使用你的方式(即使我根本没有使用autodoc)?所以最好在类级别引入方法,而不是在init内部?谢谢