Frage

Ich habe eine Menge von aufrufbaren Objekte und sie alle haben die __doc__ Zeichenfolge richtig ausgefüllt, sondern auf ihnen Hilfe laufen produziert die Hilfe für ihre Klasse statt Hilfe basierend auf __doc__.

Ich mag es so ändern, dass auf ihnen Hilfe läuft produziert maßgeschneiderte Hilfe, die Blicke im Wesentlichen wie das, was ich bekommen würde, wenn sie tatsächlich Funktionen anstelle von Instanzen einer Klasse, der implementiert __call__ sind.

Im Code, würde Ich mag die Ausgabe dieses machen:

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

    def __call__(self):
        # do some stuff
        pass

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

Sehen Sie mehr wie die Ausgabe dieses:

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

help(myFunc)
War es hilfreich?

Lösung

Die help Funktion (im pydoc Modul implementiert) hergestellt wird, nicht pro Instanz Docstrings zu finden. Ich nahm einen kurzen Blick durch das Modul zu sehen, ob es ein Weg explizite Hilfe zu leisten, aber es scheint nicht zu sein. Es nutzt den inspect Modul, um zu bestimmen, welche Art von Sache es ist, und Ihre myFunc sieht nicht wie eine Funktion, es sieht aus wie eine Instanz. So pydoc druckt Hilfe über die Klasse der Instanz statt.

Es wäre schön, wenn ähnliche Sie __doc__ ein __help__ Attribut hinzufügen könnte, aber es gibt keine Unterstützung dafür.

Ich zögere, es vorschlagen, aber die beste Wahl könnte eine neue help Funktion zu definieren sein:

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

und setzen dann ein __help__ Attribut auf Ihre Instanzen:

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

Andere Tipps

Ich bin nicht sehr klar darüber, was Ihre Frage genau ist. Mein Verständnis ist, dass Sie eine Klasse und eine Funktion definiert darin haben, und Sie wollen wissen, wo Python den Hilfetext für diese Funktion aus wird.

Python erhält den Hilfetext aus den doc-Strings in dieser Klasse / Methode zur Verfügung gestellt.

Wenn Sie in dieser Klasse eine Klasse „A“ und ein Verfahren „f“ haben und es gibt Docstrings in der Funktion „f“, dann wird die folgende Terminal-Dump sollte Ihre Frage helfen löschen:

>>> 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" '

Hope, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top