什么放在python模块docstring?

154 python documentation module

好的,所以我已经阅读了PEP 8PEP 257,并且我已经为函数和类编写了很多文档字符串,但是我对模块文档字符串中的内容有点不确定.我想,至少它应该记录模块导出的函数和类,但我也看到了一些列出作者姓名,版权信息等的模块.有没有人有一个好的python文档字符串如何应该的例子结构化?

Ale*_*lli 175

想想有人help(yourmodule)在互动翻译的提示下做什么 - 他们知道什么?(提取和显示信息的其他方法在信息量方面大致相当help).所以,如果你有x.py:

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

class Blah(object):
  """This class does blah blah."""
Run Code Online (Sandbox Code Playgroud)

然后:

>>> import x; help(x)
Run Code Online (Sandbox Code Playgroud)

说明:

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)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,关于类的详细信息(以及函数,虽然我没有在这里展示),已经包含在这些组件的文档字符串中; 模块自己的文档字符串应该非常简单地描述它们(如果有的话),而是集中精力概述模块作为一个整体可以为你做什么,理想情况下是一些经过证明的示例(就像函数和类理想情况下应该有doctested示例一样) theit docstrings).

我没有看到作者姓名和版权/许可等元数据如何帮助模块的用户 - 它可以更好地进行评论,因为它可以帮助有人考虑是否重用或修改模块.

  • 请记住,记录的最重要的事情是*为什么*。记录某件事的作用是编写良好的代码的工作。记录为什么是记录的工作。 (6认同)
  • @IfLoop我怀疑在解释器中有更多用户使用`help()`方法而不是简单阅读代码的用户. (4认同)
  • @ 007brendan,这是很常见的做法,是的. (2认同)

Rem*_*emi 44

引用规格:

脚本 (独立程序)的docstring 应该可用作其"用法"消息,当使用不正确或缺少的参数(或者可能使用"-h"选项,"help")调用脚本时打印.这样的docstring应记录脚本的功能和命令行语法,环境变量和文件.用法消息可以相当复杂(几个屏幕已满),并且应该足以让新用户正确使用该命令,以及对复杂用户的所有选项和参数的完整快速参考.

模块的docstring 通常应列出模块导出的类,异常和函数(以及任何其他对象),每个对应的摘要.(这些摘要通常提供的细节少于对象文档字符串中的摘要行.)包的文档字符串(即包的__init__.py模块的文档字符串)还应列出包导出的模块和子包.

的docstring 应该总结其行为并列出公共方法和实例变量.如果该类要进行子类化,并且具有子类的附加接口,则应单独列出此接口(在docstring中).类构造函数应记录在其__init__方法的docstring中.各个方法应该由他们自己的docstring记录.

函数方法的文档字符串 是以句点结尾的短语.它将函数或方法的效果规定为命令("Do this","Return that"),而不是描述; 例如,不要写"返回路径名......".函数或方法的多行文档字符串应该总结其行为并记录其参数,返回值,副作用,引发的异常以及何时可以调用它们的限制(如果适用,则全部).应指出可选参数.应记录关键字参数是否是接口的一部分.