O pydoc/help () pode ocultar a documentação para métodos e atributos de classe herdados?
-
27-09-2019 - |
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).
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:
- Faça sua própria cópia de lib pydoc.py
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.