O pydoc/help () pode ocultar a documentação para métodos e atributos de classe herdados?

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

Pergunta

Ao declarar uma classe que herda de uma classe específica:

class C(dict):
    added_attribute = 0

a documentação para a aula C lista todos os métodos de dict (seja através help(C) ou pydoc).

Existe uma maneira de ocultar os métodos herdados da documentação gerada automaticamente (a sequência de documentação pode se referir à classe base, para métodos não escritos)? ou é impossível?

Isso seria útil: pydoc lista as funções definidas em um módulo depois suas aulas. Assim, quando as aulas têm uma documentação muito longa, muitas informações menos úteis são impressas antes que as novas funções fornecidas pelo módulo sejam apresentadas, o que dificulta a exploração da documentação (você precisa pular toda a documentação para os métodos herdados até você atingir algo específico para o módulo que está sendo documentado).

Foi útil?

Solução

pydoc e a help Construído não apoia isso, mas não há razão para você não poder escrever sua própria ferramenta (talvez modificando a fonte do Pydoc) que teria o comportamento que você deseja. Basta caminhar dicto de aulas para obter os atributos definidos localmente e, em seguida, procure coisas que têm Doc como um atributo.

Outras dicas

Eu tive o mesmo problema e o resolvi no Python 2.7.6 para o Windows (x86) adicionando 3 linhas ao pydoc.py. Instruções:

  1. Faça sua própria cópia de lib pydoc.py
  2. Encontre todas as ocorrências do inherited variável (3 vezes, na minha contagem) no arquivo e Defina -o para uma lista vazia Logo após ser definido. Por exemplo, eu tenho a linha 809:

    attrs, herdado = _split_list (attrs, lambda t: t [2] é thisclass)

e escreveu inherited = [] em uma nova linha abaixo dela.

Agora ele não imprime mais métodos herdados.

Você pode dar à sua classe um metaclasse com o método especial __dir__ Isso retorna sua própria lista de atributos. O Pydoc usará esta lista.

Notas:

  • Isso também afetará o comportamento de dir().
  • Em casos raros, sabe -se que o uso de metaclasses abrir um portal para uma dimensão infernal.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top