Estou tentando fazer alguma herança de classe em Python. Eu gostaria que cada classe e classe herdada tivessem boas docstrings. Então eu acho que para a classe herdada, eu gostaria que:
- herdar a docstring da classe base
- talvez anexe documentação extra relevante ao docstring
Existe alguma maneira (possivelmente elegante ou pythônica) de fazer esse tipo de manipulação de docstring em uma situação de herança de classe? Que tal para herança múltipla?
python
inheritance
documentation
Craig McQueen
fonte
fonte
inspect.getdoc
pesquisarei a árvore de herança até encontrar uma docstring.Respostas:
Você não é o único! Houve uma discussão
comp.lang.python
sobre isso há algum tempo e uma receita foi criada. Confira aqui .fonte
Você pode concatenar as docstrings facilmente:
No entanto, isso é inútil. A maioria das ferramentas de geração de documentação ( Sphinx e Epydoc incluídos) já puxará docstring pai, incluindo métodos. Portanto, você não precisa fazer nada.
fonte
Não é particularmente elegante, mas simples e direto:
Agora:
fonte
Init docstring
, há uma maneira de fazer isso na definição deY
? A única maneira que consegui fazer é__init__.__doc__ = X.__init__.__doc__ + " Also another param"
seguindo a__init__
definição em,Y
mas isso parece bagunçar a formatação, causando espaços extras adicionados.Um estilo misto que pode preservar a sintaxe de docstring herdada e a ordem preferencial pode ser:
Com a mesma saída de Alex:
Gelo fino: brincar com docstring pode tornar seu módulo inutilizável com
python -OO
, espere alguns:fonte
Eu escrevi custom_inherit para fornecer algumas ferramentas simples e leves para lidar com a herança de docstring.
Ele também vem com alguns estilos padrão legais para mesclar diferentes tipos de docstrings (por exemplo, Numpy, Google e docstrings formatados com reST). Você também pode fornecer seu próprio estilo com muita facilidade.
Sobrepor seções docstring irá adiar para a seção filho, caso contrário, elas são mescladas com uma boa formatação.
fonte