10

多くの呼び出し可能なオブジェクトがあり、それらはすべて__doc__文字列が正しく入力されていますが、ヘルプを実行すると、に基づくヘルプではなく、クラスのヘルプが生成され__doc__ます。

ヘルプを実行すると、 を実装するクラスのインスタンスではなく、実際の関数である場合に得られるものと本質的に同じように見えるカスタマイズされたヘルプが生成されるように変更したいと考えています__call__

コードでは、これを出力したいと思います:

class myCallable:
    def __init__(self, doc):
        self.__doc__ = doc

    def __call__(self):
        # do some stuff
        pass

myFunc = myCallable("some doco text")
help(myFunc)

次の出力のようになります。

def myFunc():
    "some doco text"
    # do some stuff
    pass

help(myFunc)
4

2 に答える 2

5

このhelp関数 (pydocモジュールに実装されている) は、インスタンスごとのドキュメント文字列を見つける準備ができていません。モジュールをざっと調べて、明示的なヘルプを提供する方法があるかどうかを確認しましたが、ないようです。モジュールを使用して、それinspectがどのようなものであるかを判断します。 myFunc は関数のようには見えず、インスタンスのように見えます。そのため、pydoc は代わりにインスタンスのクラスに関するヘルプを出力します。

同様に属性__doc__を追加できればいいのです__help__が、それはサポートされていません。

私はそれを提案するのをためらっていますが、あなたの最善の策は新しいhelp関数を定義することかもしれません:

old_help = help
def help(thing):
    if hasattr(thing, '__help__'):
        print thing.__help__
    else:
        old_help(thing)

次に__help__、インスタンスに属性を設定します。

class myCallable:
    def __init__(self, doc):
        self.__doc__ = doc
        self.__help__ = doc
于 2009-11-24T11:30:41.697 に答える
2

あなたの質問が正確に何であるかについてはあまり明確ではありません。私の理解では、クラスとその中で定義された関数があり、Python がその関数のヘルプ テキストをどこから取得するかを知りたいと考えています。

Python は、そのクラス/メソッドで提供されるドキュメント文字列からヘルプ テキストを取得します。

クラス "A" とそのクラスにメソッド "f" があり、関数 "f" に docstring がある場合、次のターミナル ダンプが疑問を解決するのに役立ちます。

>>> class A:
        def __init__(self):
            self.c = 0   # some class variable
        def f(self, x):
            """this is the documentation/help text for the function "f" """
            return x+1

>>> help(A.f)
Help on method f in module __main__:

f(self, x) unbound __main__.A method
this is the documentation/help text for the function "f" 

>>> A.f.__doc__
'this is the documentation/help text for the function "f" '

お役に立てれば

于 2009-11-24T02:30:58.683 に答える