3

私はこのようなクラスを持っています:

class MyBase(object):
   x = 3
   """Documentation for property x"""

そしてそれを継承する別のクラス:

class MyObj(MyBase):
   x = 0

sphinxのautodocを使用してドキュメントを生成すると、ドキュメント化されMyObj.xません。docstringをから継承する方法はありますMyBase.xか?DocInheritを見つけましたが、これはデコレータを使用しているため、クラスメソッドに対してのみ機能します。プロパティでこれを行う方法はありますか?

4

4 に答える 4

5

プロパティ関数を使用した回避策を見つけました。

class MyBase(object):
   _x = 3
   x = property( lambda s: s._x, doc="Documentation for property x")

class MyObj(MyBase):
   _x = 0

これは、インスタンス変数が与えられているという点で優れています。

>>> m = MyObj()
>>> m.x
0

呼び出しhelp(m)てプロパティの適切なドキュメントを取得できx、sphinxもこれを正しく取得します。

于 2011-04-01T18:42:31.363 に答える
4

私の知る限り、属性のdocstringはPythonの一部ではありません。試してみると、MyBase.x.__doc__その下の文字列に設定されません。Docstringは、クラス、関数、およびメソッドでのみ機能します。Sphinxが下の文字列をx = 3docstringとして取得する場合、それを取得するためにソースコードの独自の処理を実行している可能性があります。

于 2011-04-01T17:18:44.957 に答える
3

Sphinxを介してドキュメントを作成することだけを考えている場合。次を使用できます: ":inherited-members:"

.. autoclass:: Noodle
   :members:
   :inherited-members:

これにより、継承されたメンバーのドキュメント文字列がSphinxドキュメントに追加されます。

http://sphinx-doc.org/ext/autodoc.html

于 2015-03-17T19:52:50.463 に答える
1

Thomasがすでに述べたように、Pythonでは属性にdocstringがありません。ただし、Sphinxは独自の処理を提供し、属性を文書化できるようにします。

class Test(object):
    #: This is an attibute docstring.
    test_attr = 'test'

    @property
    def test_prop(self):
        """This is a property docstring."""

これにより、次のようになります。

class Test
    Bases: object

    test_attr = 'test'
        This is an attibute docstring.

    test_prop
        This is a property docstring.
于 2013-12-30T12:18:05.287 に答える