2013-11-26 2 views
32

私はいくつかのグローバル定数が定義されたモジュールerrors.pyを持っています(注:私はPythonには定数がないことを理解していますが、大文字で慣習で定義しています)。Pythonでモジュール定数を文書化するには?

"""Indicates some unknown error.""" 
API_ERROR = 1 

"""Indicates that the request was bad in some way.""" 
BAD_REQUEST = 2 

"""Indicates that the request is missing required parameters.""" 
MISSING_PARAMS = 3 

reStructuredTextを使用してこれらの定数をどのように文書化できますか?あなたが見ることができるように、私はそれらの上にドキュメントストリングを記載しましたが、それを示すドキュメントは見つかりませんでした。私はちょうどそれを推測として行っています。

+0

「これらの定数をどのように文書化できますか」とはどういう意味ですか?コメント(またはあなたの場合は文字列)を追加することは、すでにドキュメントの一形式です。 sphinx-autodocに内部文書を認識させ、それをスフィンクスの出力に表示する方法を尋ねていますか? – mgilson

答えて

40

残念ながら、変数(および定数)にはドキュメントストリングはありません。結局のところ、変数は単なる整数の名前なので、関数またはクラスオブジェクトのやり方と同じように、数値の1にドキュメントストリングを付けることは望ましくありません。

stdlibのほとんどのモジュールを調べると、pickleのように、使用する唯一のドキュメントはコメントであることがわかります。完全にコメントを無視して...

DATA 
    APPEND = b'a' 
    APPENDS = b'e' 
    … 

:はい、それはhelp(pickle)はこれだけを示していることを意味します。あなたのドキュメントを組み込みのヘルプに表示するには、それらをモジュールのドキュメントストリングに追加する必要があります。これはまさに理想的ではありません。


しかし、スフィンクスはビルトインヘルプ以上のことができます。定数のコメントを抽出するように設定するか、autodataを半自動で使用することができます。たとえば:

#: Indicates some unknown error. 
API_ERROR = 1 

#:ライン任意の代入文、またはステートメントの右にある単一#:コメントする前に、複数のは、事実上のオブジェクトのドキュメンテーション文字列がautodocのでピックアップと同じ動作します。インラインrSTを処理し、変数名のrSTヘッダを自動生成します。あなたがその仕事をするために必要なことは何もありません。サイドノートとして


、あなたの代わりにこのような独立した定数のenumを使用して検討する必要があります。 Python 3.4をまだ使用していない場合は、3.238+ flufl.enumのパッケージがあります(これは同じではありませんが、これはstdlibモジュールの主なインスピレーションでした)。 )で2.6+

列挙インスタンス(ないflufl.enumが、STDLIB /バックポート版)も、ドキュメンテーション文字列を持つことができます。

class MyErrors(enum.Enum): 
    """Indicates some unknown error.""" 
    API_ERROR = 1 

    """Indicates that the request was bad in some way.""" 
    BAD_REQUEST = 2 

    """Indicates that the request is missing required parameters.""" 
    MISSING_PARAMS = 3 

彼らは残念ながらhelp(MyErrors.MISSING_PARAMS)には表示されませんが、スフィンクスのautodocのを拾うことができドキュメンテーション文字列です。

2

あなたはここで運が悪いと思います。

Pythonは変数に直接docstringをサポートしていません。モジュール、クラス、関数の__doc__属性のように変数にアタッチでき、対話的に取得できるアトリビュートはありません。

Source

+2

しかし、もしOPが単にsphinxのためにそれらを文書化しようとしているのであれば、私はepydocによって使用された '#:'がsphinxパーサーで再利用されたと信じています。 – mgilson

+0

@mgilson:ああ、リンクされたドキュメントが☺︎ – Johnsyweb

14

hash + colonを使用して、属性(クラスまたはモジュールレベル)を文書化することができます。

#: Use this content as input for moo to do bar 
    MY_CONSTANT = "foo" 

これは一部ドキュメントジェネレータをピックアップされます。ここ

たとえば、あなたが変数の後に文字列を置く場合Sphinx document module properties

14

1良く、その後、スフィンクスは、変数のドキュメントとしてそれをピックアップします見つけることができませんでした。私はそれがすべての場所でそれを行うため、それが動作することを知っている。このように:

FOO = 1 
""" 
Constant signifying foo. 

Blah blah blah... 
""" # pylint: disable=W0105 

pylintディレクティブは効果なしで声明として文書にフラグを立てる避けるためにpylintを伝えます。

+1

に役立つかもしれないし、この新しい注釈=> ..を使うことができます=> .. autodata :: FOO :注釈:... http://sphinx-doc.org/extを見てください/autodoc.html#directive-autoattribute – macm

12

これは以前の質問ですが、関連する回答が見つからないと指摘しました。

または、モジュールのドキュメントストリングには、.. py:data::で定数の説明を含めることができます。そうすれば、ドキュメンテーションはインタラクティブなヘルプを介して利用できるようになります。スフィンクスはこれをうまく表現します。

""" 
Docstring for my module. 

.. data:: API_ERROR 

    Indicates some unknown error. 

.. data:: BAD_REQUEST 

    Indicates that the request was bad in some way. 

.. data:: MISSING_PARAMS 

    Indicates that the request is missing required parameters. 
""" 
関連する問題