Python で Docstring にアクセスする

Isaac Tony 2023年1月30日
  1. Python 単一行 Docstrings
  2. Python マルチライン Docstrings
Python で Docstring にアクセスする

Python の用語集によると、docstring は、クラス、メソッド、または関数を定義した直後に表示される最初の文字列リテラルです。

オブジェクトの定義後に定義された Docstring は、多くの場合、その特定のオブジェクトに関連付けられており、print または help() 関数と一緒に __doc__ 属性を使用してアクセスできます。Docstring は通常、以下に示すように、文字列リテラルをトリプルシングルまたはトリプルダブルの引用符で囲むことによって定義されます。

def addtwo(x):
    """Takes in a number x and adds two to it."""
    return x + 2


print(addtwo.__doc__)

出力:

Takes in a number x and adds two to it.

クリーンなコードを作成するためのベストプラクティスの 1つは、特定の関数またはモジュールがどのように機能するかを説明する docstring を提供することです。開発者に重要な情報を提供するだけでなく、Sphinx docstring を使用して抽出し、プレーンテキスト、HTML、ePub、PDF などのさまざまな形式で美しいドキュメントを作成できます。

Docstring は、大きく 2つのカテゴリに分類されます。

  • 単一行
  • マルチライン

Python 単一行 Docstrings

従来、docstring は、開始と終了の両方のトリプルシングルまたはトリプルダブルが同じ行にある場合にのみ、単一行と見なされます。

多くの場合、1 行は同様の形式に従い、説明が少なくなります。代わりに、オブジェクトの機能とその戻り値について簡単に説明します。

さらに、1 行のドキュメント文字列には先頭に空白を入れないでください。常に大文字で始め、終止符で終わりを示す必要があります。以下に示すように、__doc__ 属性を使用して、単一行の docstring にアクセスすることもできます。

def square(x):
    """Takes in a number x and returns its square."""
    return x ** 2


print(square(10))
print(square.__doc__)

出力:

100
Takes in a number x and adds two to it.

Python マルチライン Docstrings

同様に、複数行の docstring も、トリプルシングルまたはトリプルダブルの引用符で囲まれた文字列リテラルによって定義されます。ただし、複数行のドキュメント文字列は通常、異なる構造または形式に従います。

複数行の docstring は通常、複数の行にまたがっています。最初の行は通常、オブジェクトの簡単な説明のみを提供するためのものです。

この説明の後には、1 行の空白行と、パラメーターのより詳細な説明(存在する場合)が続き、後続の行でオブジェクトの引数を返します。scikit learnpandas などの大規模なライブラリには、そのライブラリ内で利用可能なパッケージを一覧表示するセクションも含まれています。

複数行の docstring は一般的に同様の構造を持っていますが、いくつかの違いはオブジェクトタイプによって異なります。関数オブジェクトでは、docstring は以下の構造に従います。

def add_numbers(x, y):
    """
    Function takes to arguments and returns the sum of the two

         Parameter:
                 x (int): An integer
                 y (int): Another integer

        Returns:
               sum(int): Returns an integer sum of x and y

    """
    sum = x + y
    return sum


print(add_numbers.__doc__)

出力:

Function takes to arguments and returns the sum of the two
    
         Parameter:
                 x (int): An integer
                 y (int): Another integer
                 
        Returns:
               sum(int): Returns an integer sum of x and y

ScikitNumPyPandas などの大規模なモジュールでは、docstring は以下の形式に従います。

後で説明するように、help() 関数と __doc__ 属性を使用して docstring にアクセスすることもできます。__doc__ 属性を使用して、以下のようなモジュールの docstring にアクセスできます。

import pandas as pd

print(pd.__doc__)

出力:

python pandas docstrings

クラスの下に作成された Docstring は、クラスの機能を記述し、その特定のクラスのすべてのインスタンス変数とすべてのパブリックメソッドをリストする必要があります。サブクラスとも呼ばれるメインクラスから継承するクラスには、個別にアクセスできる docstring が必要です。

以下に示すように、docstring は、__doc___ 属性を使用してクラスで作成およびアクセスできます。

class Car:
    """
    A class to represent a car.

    ...

    Attributes
    ----------
    manufacturer : str
        company that manufactured the car
    model : str
        model of the car
    color : str
        color of the car

    Methods
    -------
    display_info():
        Prints out the car manufacturer, model and color
    """

    def __init__(self, manufacturer, model, color):
        """
        Constructs all the attributes for the car object.

        Parameters
        ----------
                manufacturer : str
                   company that manufactured the car
                model : str
                   model of the car
                color : str
                   color of the car
        """

        self.model = model
        self.color = color
        self.manufacturer = manufacturer

    def display_info(self, color, model, manufacturer):
        """
        Prints the model of the car its color and the manufacturer.

        Parameters
        ----------
        model : str
        color : str
        manufacture: str

        Returns
        -------
        None
        """

        print(f"The {self.color} {self.model} is manufactured by {self.manufacturer}")


print(Car.__doc__)
help(Car)

出力:

A class to represent a car.

    ...

    Attributes
    ----------
    manufacturer : str
        company that manufactured the car
    model : str
        model of the car
    color : str
        color of the car

    Methods
    -------
    display_info():
        Prints out the car manufacturer, model and color
    
Help on class Car in module __main__:

class Car(builtins.object)
 |  Car(manufacturer, model, color)
 |  
 |  A class to represent a car.
 |  
 |  ...
 |  
 |  Attributes
 |  ----------

Python docstring は、開発者がコードを理解するのを支援する上で同様の役割を果たしているように見えますが、コメントはインタプリタによって無視されます。Python では、1 行のコメントの前にハッシュ記号を付け、複数行にすることはできません。

複数行コメントもトリプルダブルまたはトリプルシングル引用符で囲まれていますが、コメントは通常、特定の構造に従いません。使用状況によってフォーマットが若干異なるように見える docstring とは異なり、コメントはプログラムに関係なく一般的に同じように使用されます。

著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

関連記事 - Python Docstring