Kann pydoc / help () versteckt die Dokumentation für geerbte Klasse Methoden und Attribute?
-
27-09-2019 - |
Frage
Bei der Deklaration einer Klasse, die erbt von einer bestimmten Klasse:
class C(dict):
added_attribute = 0
die Dokumentation für die Klasse C
listet alle Methoden der dict
(entweder durch help(C)
oder pydoc
).
Gibt es eine Möglichkeit die geerbten Methoden aus der automatisch generierte Dokumentation (das Docstring auf die Basisklasse beziehen, für Nicht-überschrieben Methoden) zu verbergen? oder ist es unmöglich?
Dies wäre nützlich: pydoc
listet die in einem Modul definierten Funktionen nach seinen Klassen. Wenn also die Klassen eine sehr lange Dokumentation haben, viel weniger als nützliche Informationen, bevor die neuen Funktionen, die von dem Modul bereitgestellt gedruckt wird vorgestellt, die die Dokumentation schwieriger macht zu nutzen (Sie müssen alle Unterlagen für die geerbten Methoden überspringen bis Sie etwas spezifisch für das Modul wird dokumentiert).
Lösung
pydoc
und die help
builtin unterstützen dies nicht, aber es gibt keinen Grund, warum Sie nicht Ihr eigenes Werkzeug (vielleicht durch Modifizieren pydoc der Quelle) schreiben könnte, die das Verhalten haben würden Sie sich wünschen. Gehen Sie einfach die dict von Klassen, die lokal definierten Eigenschaften zu erhalten, dann suchen Sie nach Dingen, die haben doc als Attribut.
Andere Tipps
Ich hatte das gleiche Problem und löste es auf Python 2.7.6 für Windows (x86) durch Zugabe von 3 Zeilen zu pydoc.py. Anleitung:
- Ihre eigene Kopie von Lib machen \ pydoc.py
-
finden Sie alle Vorkommen der
inherited
Variable (3-mal auf meiner Zählung) in der Datei und setzen Sie sich auf eine leere Liste direkt nach dem sie definiert ist . Zum Beispiel habe ich Linie 809:attrs, erbte = _split_list (attrs, Lambda-t: t [2] ist thisclass)
und schrieb inherited = []
auf eine neue Zeile darunter.
Nun ist es nicht geerbten Methoden druckt mehr.
Sie können Ihre Klasse eine Metaklasse mit dem speziellen Verfahren __dir__
geben, der seine eigene Liste der Attribute zurückgibt. Pydoc wird diese Liste verwenden.
Weitere Informationen:
- das wird auch das Verhalten von
dir()
beeinflussen. - in seltenen Fällen, die Verwendung von metaclasses wurde bekannt, ein Portal zu einer Höllendimension zu öffnen.