2011-08-08 4 views
2

Noneを使用して人々がいくつかのメソッドを呼び出せるようにするには、メソッドを定義するときにsentinel objectを使用する必要があります。センチネルオブジェクトでデフォルトのパラメータを持つSphinxのpythonメソッドでドキュメント化しますか?

_sentinel = object() 
def foo(param1=_sentinel): 
    ... 

これは、あなたがfoo(param1=None)を呼び出し、foo()などのコールとの違いを作ることができるようにできるようになります。

問題はスフィンクスが方法を文書化しない場合、それはどのように私は、これらの機能のためのユーザーフレンドリーな出力を持つようにスフィンクスを説得することができます

mymodule.foo(param1=<object object at 0x108c1a520>) 

のようなものを書くということですか?

注:センチネルアプローチを使用して3-4のパラメータがある場合、ドキュメントがどのように見えるかを想像してください。

答えて

0

私は、機能の外にオブジェクトを作成するセンチネルを持っている限り、スフィンクスをよりフレンドリーに説得することはできないと思います。 Sphinx 'autodoc extension imports the module、これはモジュールレベルのコードが実行されることを意味します。

本当にこのようなことはできませんか?

def foo(param1=None): 
    if param1 == None: 
     param1 = whatever you want... 
    else: 
     ... 
+2

センチネル機能外部単発オブジェクトであるので、私はソーリンは本当にあなたが示唆しているものを使用することはできないと考えています。 –

1

これは、例えば、autodocのディレクティブで手動で指定する関数シグネチャによって処理することができる。その機能は、一般的なケースとして、なし値を処理できるように

.. automodule:: pymorphy.contrib.tokenizers 

    .. autofunction:: extract_tokens(foo, bar) 

    .. autofunction:: extract_words 
+0

はい、これは動作します:+1。なぜ私はそれを考えなかったのですか? :-) http://stackoverflow.com/questions/5365684 – mzjn

関連する問題