5

外部クラスを拡張するクラスに対して autodoc を実行しようとしています。

インポートが受け入れられるように、モックを使用しました。

そのために、このブログ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 ファイルは次のようになります: from de.xyz import class_that_is_extended

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

sphinx を実行すると、クラス名とソースへのリンクだけが表示されます。

「class extends_class (class_that_is_extended):」という行を「class extends_class (object):」に変更すると、sphinx/autodoc は docstring を含むドキュメントを生成します。

クラスをそのままにして、ドキュメントでdocstringを取得するにはどうすればよいですか?

4

2 に答える 2

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)
于 2018-03-30T08:08:19.003 に答える