我试图在扩展外部类的类上运行autodoc。
我使用了mock,以便接受导入。
中描述的内容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生成文档。
如何保持课程原样,仍然可以获得文档中的文档字符串?
答案 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)