Pythonモジュールのdocstringに何を入れますか?[閉まっている]


167

わかりました、それで私はPEP 8PEP 257の両方を読みました、そして私は関数とクラスのためにたくさんのdocstringを書きました、しかし私はモジュールdocstringに何を入れるべきかについて少しわかりません。少なくとも、モジュールがエクスポートする関数とクラスを文書化する必要があると考えましたが、作成者名、著作権情報などをリストするモジュールもいくつか見ました。優れたpython docstringの例を誰かが持っていますか構造化されていますか?

回答:


183

help(yourmodule)インタラクティブな通訳者のプロンプトで誰かがしていることについて考えてください—彼らは何を知りたいですか?(情報を抽出して表示する他の方法は、情報help量の点ではほぼ同じです)。だからあなたが持っているならx.py

"""This module does blah blah."""

class Blah(object):
  """This class does blah blah."""

次に:

>>> import x; help(x)

ショー:

Help on module x:

NAME
    x - This module does blah blah.

FILE
    /tmp/x.py

CLASSES
    __builtin__.object
        Blah

    class Blah(__builtin__.object)
     |  This class does blah blah.
     |  
     |  Data and other attributes defined here:
     |  
     |  __dict__ = <dictproxy object>
     |      dictionary for instance variables (if defined)
     |  
     |  __weakref__ = <attribute '__weakref__' of 'Blah' objects>
     |      list of weak references to the object (if defined)

ご覧のとおり、クラス(およびここでは表示していませんが、関数)の詳細情報は、これらのコンポーネントのドキュメント文字列から既に含まれています。モジュール自体のdocstringはそれらを非常に要約して(もしあれば)記述し、モジュール全体が何ができるかについての簡潔な要約に集中する必要があります。彼らのdocstrings)。

著者名や著作権/ライセンスなどのメタデータがモジュールのユーザーにどのように役立つかわかりません。モジュールを再利用または変更するかどうかを検討している人を助けるので、コメントで送信できます。


1
では、モジュールの上部にあるコメントに作者や著作権などを含めるのは慣習なのでしょうか?

2
@ 007brendan、それはかなり一般的な方法です、はい。
Alex Martelli、2010

4
@IfLoop help()インタプリタでメソッドを使用するユーザーが、コードを単に読むユーザーよりも多いのではないかと思います。
confused00

2
文書化する最も重要なことは、その理由です。何かが何であるかを文書化することは、よく書かれたコードの仕事です。なぜ文書化が文書化の仕事なのか。
Erik Aronesty

50

仕様を引用するには:

スクリプト (スタンドアロンプ​​ログラム)のdocstringは、スクリプトが不正な引数または欠落している引数(または「ヘルプ」の「-h」オプションで呼び出された場合)に出力される「使用方法」メッセージとして使用できます。そのようなdocstringは、スクリプトの関数とコマンドライン構文、環境変数、およびファイルを文書化する必要があります。使用法のメッセージはかなり複雑で(いくつかの画面がいっぱい)、新しいユーザーがコマンドを適切に使用できるだけでなく、洗練されたユーザーのすべてのオプションと引数の完全なクイックリファレンスである必要があります。

モジュールのdocstringは、 通常、モジュールによってエクスポートされるクラス、例外、関数(およびその他のオブジェクト)を、それぞれの1行の要約とともにリストする必要があります。(これらの要約は、通常、オブジェクトのdocstringの要約行よりも詳細がわかりません。)パッケージのdocstring(つまり、パッケージの__init__.pyモジュールのdocstring )も、パッケージによってエクスポートされたモジュールとサブパッケージをリストする必要があります。

クラスのdocstringは、 その動作を要約し、パブリックメソッドとインスタンス変数をリストする必要があります。クラスがサブクラス化されることが意図されており、サブクラス用の追加のインターフェイスがある場合、このインターフェイスは(docstringに)個別にリストする必要があります。クラスコンストラクターは、その__init__メソッドのdocstringに文書化されている必要があります。個々のメソッドは、独自のdocstringで文書化する必要があります。

関数またはメソッドのdocstringは 、ピリオドで終わるフレーズです。関数またはメソッドの効果を説明としてではなく、コマンド(「これを実行」、「それを返す」)として規定します。たとえば、「パス名を返す...」と書かないでください。関数またはメソッドのmultiline-docstringは、その動作を要約し、その引数、戻り値、副作用、発生した例外、およびいつ呼び出すことができるかの制限(該当する場合はすべて)を文書化する必要があります。オプションの引数を指定する必要があります。キーワード引数がインターフェースの一部であるかどうかを文書化する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.