Sphinx python: autodoc 不导入在其他源文件中定义的 class 方法
Sphinx python: autodoc does not import class methods defined in other source files
在我的项目中,我在 energymodel.py
中定义了一个 class 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 生成 class 文档。我的 implementation.rst
如下:
Implementation
==============
.. _Energymodel_class:
Energymodel class
-----------------
.. autoclass:: neuralflow.EnergyModel
:members:
其中 neuralflow 是包的名称(在 conf.py
中导入)。这不会为 generate_data
方法生成文档。我没有找到如何包含它,我只找到了如何交叉引用的方法,这不是我想要的。
编辑:在我的目录中也有__init__.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()
方法是动态添加到构造函数中的 class 的。因为 Sphinx 从不调用构造函数(正如 @mzjn 指出的那样),所以当 Sphinx 构建文档时,此方法根本不是 class 的一部分。解决办法是在class层定义方法:
import energy_model_generation as emg
class EnergyModel(BaseEstimator):
generate_data = emg.generate_data
更多的是 code-review 类型的注释,像这样在构造函数中动态创建方法并没有什么意义。方法应该只定义一次,但构造函数可以调用多次——class 的每个实例调用一次。很容易想象这是模糊错误的来源。
在我的项目中,我在 energymodel.py
中定义了一个 class 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 生成 class 文档。我的 implementation.rst
如下:
Implementation
==============
.. _Energymodel_class:
Energymodel class
-----------------
.. autoclass:: neuralflow.EnergyModel
:members:
其中 neuralflow 是包的名称(在 conf.py
中导入)。这不会为 generate_data
方法生成文档。我没有找到如何包含它,我只找到了如何交叉引用的方法,这不是我想要的。
编辑:在我的目录中也有__init__.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()
方法是动态添加到构造函数中的 class 的。因为 Sphinx 从不调用构造函数(正如 @mzjn 指出的那样),所以当 Sphinx 构建文档时,此方法根本不是 class 的一部分。解决办法是在class层定义方法:
import energy_model_generation as emg
class EnergyModel(BaseEstimator):
generate_data = emg.generate_data
更多的是 code-review 类型的注释,像这样在构造函数中动态创建方法并没有什么意义。方法应该只定义一次,但构造函数可以调用多次——class 的每个实例调用一次。很容易想象这是模糊错误的来源。