Può pydoc / help () nascondere la documentazione per metodi di classe e gli attributi ereditati?

StackOverflow https://stackoverflow.com/questions/2857247

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).

È stato utile?

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:

  1. fare la propria copia di Lib \ pydoc.py
  2. 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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top