autodoc一个扩展模拟类的类

时间:2014-09-17 14:40:41

标签: python-2.7 mocking python-sphinx autodoc

我试图在扩展外部类的类上运行autodoc。

我使用了mock,以便接受导入。

为此,我使用了此博客http://blog.rtwilson.com/how-to-make-your-sphinx-documentation-compile-with-readthedocs-when-youre-using-numpy-and-scipy/

中描述的内容
import mock

MOCK_MODULES = ['de', 'de.xyz', 'de.xyz.class_that_is_extended']
for mod_name in MOCK_MODULES:
  sys.modules[mod_name] = mock.Mock()

我尝试记录的python文件如下所示:     来自de.xyz import class_that_is_extended

class extending_class (class_that_is_extended):
'''
  docstring
'''

运行sphinx之后,结果是,只显示了类名加上源的链接。

当我更改行"类extend_class(class_that_is_extended)时:" to" class extend_class(object):" sphinx / autodoc使用docstring生成文档。

如何保持课程原样,仍然可以获得文档中的文档字符串?

2 个答案:

答案 0 :(得分:2)

使用此处发布的apporach: Sphinx-doc :automodule: with Mock imports

我刚刚更改了这一行:

sys.modules[mod_name] = mock.Mock()

为:

sys.modules[mod_name] = mock.Mock(class_that_is_extended=object)

并从MOCK_MODULES中删除'de.xyz.class_that_is_extended'

答案 1 :(得分:0)

我遇到了同样的问题,我的解决方案是直接从object返回Mock关于属性访问的问题。

from unittest.mock import MagicMock

MOCK_MODULES = [
    # modules to mock
    'kivy.uix.floatlayout',
]

MOCK_CLASSES = [
    # classes you are inheriting from
    "FloatLayout",
]


class Mock(MagicMock):
    @classmethod
    def __getattr__(cls, name):
        if name in MOCK_CLASSES:
            return object
        return MagicMock()


sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES)