正規表現の使用:
$ cat script.py
from __future__ import print_function
import sys, re
"""
Multiline comment with unique
text pertaining to the Foo class
"""
class Foo():
pass
"""
Multiline comment with unique
text pertaining to the Bar class
"""
class Bar():
pass
"""
Multiline comment with unique
text pertaining to the FooBar class
"""
class FooBar():
pass
def print_comments():
with open(sys.argv[0]) as f:
file_contents = f.read()
map(print, re.findall(r'"""\n([^"""]*)"""', file_contents, re.S))
print_comments()
$ python script.py
Multiline comment with unique
text pertaining to the Foo class
Multiline comment with unique
text pertaining to the Bar class
Multiline comment with unique
text pertaining to the FooBar class
正規表現の説明:
"""\n([^"""]*)"""

Debuggex デモ
これを行う理想的な方法は、ast モジュールを使用し、ドキュメント全体を解析してから、タイプが ast.FunctionDef、ast.ClassDef、または ast.Module のすべてのノードで ast.get_docstring を出力することです。ただし、コメントはドキュメントストリングではありません。ファイルが次のようなものだったとします。
$ cat script.py
import sys, re, ast
class Foo():
"""
Multiline comment with unique
text pertaining to the Foo class
"""
pass
class Bar():
"""
Multiline comment with unique
text pertaining to the Bar class
"""
pass
class FooBar():
"""
Multiline comment with unique
text pertaining to the FooBar class
"""
pass
def print_docstrings():
with open(sys.argv[0]) as f:
file_contents = f.read()
tree = ast.parse(file_contents)
class_nodes = filter((lambda x: type(x) in [ast.ClassDef, ast.FunctionDef, ast.Module]), ast.walk(tree))
for node in class_nodes:
doc_str = ast.get_docstring(node)
if doc_str:
print doc_str
print_docstrings()
$ python script.py
Multiline comment with unique
text pertaining to the Foo class
Multiline comment with unique
text pertaining to the Bar class
Multiline comment with unique
text pertaining to the FooBar class