2008-09-30 13 views
1

私は(modはC拡張モジュールです)拡張機能や「ヘルプ」

help(Mod.Cls.f) 

呼び出すと、私はヘルプの出力ように何をする必要がありますどのような出力

Help on method_descriptor: 

f(...) 
    doc_string

を取得形式は

Help on method f in module Mod: 

f(x, y, z) 
    doc_string

です。これはrandom.Random.shuffleのようですか?

マイPyMethodDefエントリは現在、次のとおりです。

{ "f", f, METH_VARARGS, "doc_string" } 

答えて

2

あなたがすることはできません。 'pydoc'と 'help()'が使用するinspectモジュールは、C関数の正確な署名が何であるかを知る方法がありません。あなたができる最善のは、組み込み関数が何をすべきかです:ドキュメンテーション文字列の最初の行に署名を含める:

>>> help(range) 
Help on built-in function range in module __builtin__: 

range(...) 
    range([start,] stop[, step]) -> list of integers 

... 

理由random.shuffleのドキュメンテーション文字列が「正しい」に見える、それはCの関数ではないということです。これはPythonで書かれた関数です。

+0

ありがとうございます。しかし、メソッドとモジュールの名前ではなく、なぜmethod_descriptorですか? –

+0

これは、Pythonがオブジェクトが何であるかを考えるものです。 'help(list.append)'を参照すると、同じことが表示されます。 –

+0

ああ、私は参照してください...ヘルプ(list.sort)はまったく同じです。それがlist.sortのために十分であれば、それは私のために十分です:-) –

1

トーマスの答えは当然です。

多くのC拡張モジュールにPythonの「ラッパー」が付いているので、標準の関数シグネチャや他の動的言語機能(記述子プロトコルなど)をサポートできるようにするだけです。