Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sphinx python:autodoc不导入在其他源文件中定义的类方法_Python_Python Sphinx_Autodoc - Fatal编程技术网

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内部?谢谢