【问题标题】:autodoc a class that extends a mocked classautodoc 扩展模拟类的类
【发布时间】:2014-09-17 14:40:41
【问题描述】:

我正在尝试对扩展外部类的类运行 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 导入 class_that_is_extended

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

运行 sphinx 后,结果是只显示类名和源链接。

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

我怎样才能让课程保持原样并仍然获得文档中的文档字符串?

【问题讨论】:

    标签: python-2.7 mocking python-sphinx autodoc


    【解决方案1】:

    使用此处发布的方法: 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”

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,我的解决方法是在属性访问时直接从Mock返回object

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-15
        相关资源
        最近更新 更多