在 Python 中访问文档字符串

Isaac Tony 2024年2月15日
  1. Python 单行文档字符串
  2. Python 多行文档字符串
在 Python 中访问文档字符串

根据 python 词汇表,docstring 是在定义类、方法或函数后立即出现的第一个字符串文字。

在任何对象的定义之后定义的文档字符串通常与该特定对象相关联,并且可以使用 __doc__ 属性与 print 或 help() 函数一起访问。文档字符串通常通过将字符串文字包含在三重单引号或三重双引号中来定义,如下所示:

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.

编写干净代码的最佳实践之一是提供描述特定函数或模块如何工作的文档字符串。除了向开发人员提供重要信息外,还可以提取 Sphinx 文档字符串以创建不同格式的精美文档,例如纯文本、HTML、ePub 或 PDF。

文档字符串主要分为两类:

  • 单线
  • 多线

Python 单行文档字符串

按照惯例,只有当开始和结束三重单或三重双在同一行上时,文档字符串才被视为单行。

单行通常遵循类似的格式并且不太具有描述性。相反,它们提供了对象的作用及其返回值的简短说明。

此外,单行文档字符串不应有前导空格,并且应始终以大写字母开头并以句号结尾。__doc__ 属性也可用于访问单行文档字符串,如下所示。

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 多行文档字符串

类似地,多行文档字符串也通过将字符串文字包含在三重单引号或三重双引号中来定义。但是,多行文档字符串通常遵循不同的结构或格式。

多行文档字符串通常跨越多行。第一行通常专用于仅提供对象的简短描述。

此描述后跟一个空行和更详细的参数描述(如果有),并在后续行中返回对象的参数。大型库,如 scikit learnpandas 还包括一个部分,列出该库中可用的包。

尽管多行文档字符串通常具有相似的结构,但某些差异取决于对象类型。在函数对象中,文档字符串将遵循以下结构。

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 等大型模块中,文档字符串遵循以下格式。

我们还可以使用 help() 函数和 __doc__ 属性来访问文档字符串,我们将在后面看到。我们可以使用 __doc__ 属性来访问模块中的文档字符串,如下所示。

import pandas as pd

print(pd.__doc__)

输出:

python Pandas 文档字符串

在类下创建的文档字符串应该说明类的功能,列出该特定类的所有实例变量以及所有公共方法。从主类继承的类,也称为子类,应该有可以单独访问的文档字符串。

如下所示,可以使用 __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 文档字符串在帮助开发人员理解他们的代码方面似乎扮演着类似的角色,但解释器会忽略注释。在 Python 中,单行注释前面有一个哈希符号,并且不能超过一行。

尽管多行注释也写在三双或三单引号内,但注释通常不遵循特定的结构。与 docstrings 似乎根据使用环境的不同而略有不同的格式不同,另一方面,无论程序如何,注释通常都以相同的方式使用。

作者: 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