2011-12-22 7 views
4

スフィンクスのautomodule ::とその他の自動機能を使用して、インポートされたモジュールのドキュメントをすべて含まずにfrom x import *ステートメントを含むモジュールをドキュメント化できますか?"from x import *"を使用したファイルのドキュメント化

EDIT: インポートされたメソッドの '__module__'属性がモジュール名と同じでない限り、mzjnのポイントに記載されているとおり、それらは文書化されるべきではありません。しかし、私のモジュールの中には、それらがあります。

私のMLEは、次の行で単にファイルtest_doc.pyファイルです:私はtest_doc.pyにこの行が含まれている場合

.. automodule:: agpy.test_doc 
    :members: 

from pylab import * 

とドキュメント

print "beta.__module__:",beta.__module__ 

期待通りの結果が得られます:

beta.__module__: None 

何が起こっているのでしょうか? conf.pyに何かをねじ込むことができますか?

EDIT:__module__==Noneを持って、それらの機能の__module__属性を変更するにはmzjnの答えどおりの回避策、:

import pylab 
from pylab import * 
for k,v in pylab.__dict__.iteritems(): 
    if hasattr(v,'__module__'): 
     if v.__module__ is None: 
      locals()[k].__module__ = 'pylab' 
+0

「ベータ」とは何ですか? – mzjn

+0

アルファベット順で 'pylab'の最初のモジュール – keflavich

答えて

4

はい、動作するはずです。 the documentationから:

メンバーのオプションが設定されたautomoduleとディレクティブで、その__module__属性automoduleとに与えられたモジュール名と等しい場合にのみモジュールのメンバーが記載されます。これは、インポートされたクラスや関数のドキュメント化を防ぐためです。


更新:

問題は、多くのpylabメンバーの__module__属性は、(メンバーが私の知る限り、C/Cythonモジュールmtrandで定義された)Noneであることのようです。

mtrandモジュールはNumPyの一部です。その背後では、pylab.beta(および他のいくつかの関数)はクラスnumpy.random.mtrand.RandomStateのメソッドです。

をこのソース(pylabtest.py)

from pylab import beta 

def mzjn(x): 
    """mzjn docstring""" 
    return x 

と(pylabtest.rst)このソース文書で

Pylab test 
========== 

.. automodule:: pylabtest 
    :members: 

pylabtestでスフィンクス出力:私は次のようにドキュメントの問題を再現することができます。 htmlにはbetamzjnが含まれています。

しかし

beta.__module__ = "pylab" 

がpylabtest.pyに追加された場合、唯一の mzjnが文書化されています。

+0

ありがとう...うまくいきませんでしたが、なぜ分かりませんが、関数の__module__属性があるかどうかを確認します。 – keflavich

+0

更新いただきありがとうございます。すみません、私は1週間逃しました。私はあなたが問題を特定したと思う、何が起こっているのか?すなわち、なぜピラッブが機能しているのですか?とにかく、私はあなたの答えを受け入れていると私の質問に(かなり醜い)回避策を含む – keflavich

+0

私はまた、問題が発生するのだろうかと思う。おかしいです。 'pylab.beta'は' None'の値を持つ '__module__'属性を持っています。しかし、 'numpy.random.mtrand.RandomState.beta'には' __module__'属性がありません。 – mzjn

関連する問題