2

コード例:

class A(object):
    def do_something(self):
        """ doc_a """
        def inside_function():
            """ doc_b """
            pass
        pass

私は試した:

.. autoclass:: A
    .. autofunction:: A.do_something.inside_function

しかし、それは機能しません。

私のために生成する方法はありdoc_bますか?

4

1 に答える 1

2

関数内の関数はローカル変数スコープにあります。関数のローカル変数には、関数の外部からアクセスできません。

>>> def x():
...    def y():
...       pass
... 
>>> x
<function x at 0x7f68560295f0>
>>> x.y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'y'

Sphinxが関数への参照を取得できない場合、それを文書化することはできません。

動作する可能性のある回避策は、次のように関数を関数の変数に割り当てることです。

>>> def x():
...    def _y():
...       pass
...    x.y = _y
... 

最初はアクセスできません:

>>> x.y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'function' object has no attribute 'y'

ただし、関数を最初に呼び出した後は、次のようになります。

>>> x()
>>> x.y
<function _y at 0x1a720c8>

これは、Sphinxがモジュールをインポートするときに関数が実行される場合に機能する可能性があります。

于 2012-08-20T14:52:31.580 に答える