2

.py関数APIとを表示してaをHTMLに変換する簡単な方法はありdocstringますか?私はSphinxについて読みましたが、それは大きなプロジェクトのようです。.py関数定義と。だけでファイルからHTMLを作成する方法を見つけようとしていますdocstring

4

2 に答える 2

2

あなたはどんな道具なしでもそれをすることができます。まず、データを取得する必要があります。これが非常に基本的な例です。

"""My module"""

def foo():
    """Some function"""
    pass

def bar():
    """Another function"""
    pass

class Spam(object):
    """Some object"""
    pass

if __name__ == '__main__':
    import types

    defs = set(locals().keys()).difference(set(__builtins__.keys())) 

    if __doc__:
        print 'Module:'
        print __doc__, '\n'

    for name in defs:
        object_ = locals()[name]
        if type(object_) is types.FunctionType:
            print "Function %s:" % object_.__name__
            print object_.__doc__, '\n'
        elif type(object_) is type:
            print "Class %s:" % object_.__name__
            print object_.__doc__, '\n'

そして、出力は次のようになります。

Module:
My module 

Function bar:
Another function 

Class Spam:
Some object 

Function foo:
Some function 

HTMLを取得するには、 Makoなどのテンプレートエンジンを使用できます。テンプレートを作成し、そこからデータを渡す__doc__と、それでうまくいくはずです。

編集:関数から署名を取得する方法は次のとおりです。

>>> def foo(spam, eggs):
...     bar = spam + eggs
...     return bar
>>> varnames = foo.func_code.co_varnames
>>> argcount = foo.func_code.co_argcount
>>> '%s(%s)' % (foo.__name__, ', '.join(varnames[:argcount]))
0: 'foo(spam, eggs)'
于 2013-02-20T10:39:36.740 に答える
1

私の手書きのAPIドキュメントハンドラーはそのようなことをします。

import inspect
inspect.getmembers(MyClass, predicate=inspect.ismethod)

使用可能なすべてのメソッドのリストが返されます。最初のオブジェクトはメソッド名の文字列表現であるため、単純なフィルター関数を使用してそれらの一部をフィルターで除外できます。私のAPIは、_(内部メソッドであり、APIから到達可能であってはならない)で始まるメソッドを除外します。

    filter(lambda x: not x.startswith('_'), [x[0] for x in inspect.getmembers(MyClass, predicate=inspect.ismethod)])

2番目のオブジェクトは、関連するメソッドのインスタンスメソッドです。これを使用して__doc__、docstringまたはメソッドインスタンスで呼び出すことができるその他のメソッドを取得するために呼び出すことができます

for item in inspect.getmembers(MyClass, predicate=inspect.ismethod):
    print item[0]
    print item[1].__doc__
于 2013-02-20T11:07:09.257 に答える