Può pydoc / help () nascondere la documentazione per metodi di classe e gli attributi ereditati?
-
27-09-2019 - |
Domanda
Quando si dichiara una classe che eredita da una classe specifica:
class C(dict):
added_attribute = 0
la documentazione per le liste di classe C
tutti i metodi di dict
(sia attraverso help(C)
o pydoc
).
C'è un modo per nascondere i metodi ereditati dalla documentazione generata automaticamente (la stringa di documentazione può fare riferimento alla classe di base, per i metodi non-scritti sopra)? o è impossibile?
Questo sarebbe utile: liste pydoc
le funzioni definite in un modulo dopo le sue classi. Così, quando le classi hanno una lunga documentazione, molto inferiore a informazioni utili viene stampata prima che le nuove funzioni fornite dal modulo sono presentati, il che rende la documentazione più difficile da sfruttare (si deve ignorare tutta la documentazione per i metodi ereditati fino a raggiungere qualcosa di specifico per il modulo viene documentato).
Soluzione
pydoc
e la funzione interna help
non supportano questa, ma non c'è ragione per cui non si poteva scrivere il proprio strumento (forse per fonte modificando di pydoc) che avrebbe il comportamento desiderato. Solo a piedi la dict di classi per ottenere gli attributi definiti localmente, quindi cercare le cose che hanno doc come un attributo.
Altri suggerimenti
Ho avuto lo stesso problema e risolto su Python 2.7.6 per Windows (x86) con l'aggiunta di 3 linee a pydoc.py. Istruzioni:
- fare la propria copia di Lib \ pydoc.py
-
trova tutte le occorrenze di variabile
inherited
(3 volte, il mio conteggio) nel file e impostarlo su un elenco vuoto a destra dopo che è stato definito . Per esempio, ho avuto la linea 809:attrs, ereditato = _split_list (attrs, lambda t: t [2] è thisclass)
e scrisse inherited = []
su una nuova linea di sotto di essa.
Ora non stampa più metodi ereditati.
Si può dare la classe di un metaclasse con il metodo speciale __dir__
che restituisce una propria lista di attributi. Pydoc userà questa lista.
Note:
- questo influirà anche il comportamento di
dir()
. - in rari casi, l'uso di metaclassi è stato conosciuto per aprire un portale per una dimensione infernale.