2010-05-18 14 views
5

Cuando se declara una clase que hereda de una clase específica:¿Puede pydoc/help() ocultar la documentación de los métodos y atributos de clase heredados?

class C(dict): 
    added_attribute = 0 

la documentación para la clase C enumera todos los métodos de dict (ya sea a través help(C) o pydoc).

¿Hay alguna manera de ocultar los métodos heredados de la documentación generada automáticamente (la cadena de documentación puede hacer referencia a la clase base, para los métodos no sobrescritos)? o es imposible?

Esto sería útil: pydoc enumera las funciones definidas en un módulo después de sus clases. Por lo tanto, cuando las clases tienen una documentación muy larga, se imprime mucha información que no es útil antes de que se presenten las nuevas funciones proporcionadas por el módulo, lo que dificulta la explotación de la documentación (debe omitir toda la documentación para los métodos heredados hasta llegar a algo específico para el módulo documentado).

Respuesta

2

pydoc y help no son compatibles, pero no hay razón para que no puedas escribir tu propia herramienta (quizás modificando la fuente de pydoc) que tenga el comportamiento que deseas. Simplemente recorra el dict de las clases para obtener los atributos definidos localmente, luego busque las cosas que tienen doc como un atributo.

+0

Gracias. Solo quería saber si * usuarios * podría obtener directamente una documentación pydoc más útil para mis módulos ajustándolos. Es bueno saber que pydoc y help() son limitados, en este sentido. – EOL

0

Puede dar a su clase una metaclase con el método especial __dir__ que devuelve su propia lista de atributos. Pydoc usará esta lista.

Notas:

  • esto también afectará el comportamiento de dir().
  • en casos raros, se sabe que el uso de metaclases abre un portal a una dimensión infernal.
+1

Gracias por mencionar esto.Traté de hacer lo que sugieres (adaptando ejemplos de http://www.voidspace.org.uk/python/articles/metaclasses.shtml), pero mientras se cambia el comportamiento pydoc, no se muestra ningún atributo. Sería bueno si pudiera proporcionar algún código. :) – EOL

1

Tuve el mismo problema y lo resolví en Python 2.7.6 para Windows (x86) agregando 3 líneas a pydoc.py. Instrucciones:

  1. hacer su propia copia de Lib \ pydoc.py
  2. encontrar todas las apariciones de los inherited variables (3 veces, en mi cuenta) en el archivo y fijan a una lista vacía justo después de que esté definido. Por ejemplo, llegué línea 809:

    attrs, heredado = _split_list (attrs, lambda t: t [2] es thisclass)

y escribía inherited = [] en una nueva línea debajo de ella.

Ahora ya no imprime métodos heredados.

Cuestiones relacionadas