Il existe une question à propos de Inherit docstrings in Python class inheritance, mais les réponses à cette question portent sur les méthodes docstrings.Hériter d'une classe parent docstring en tant qu'attribut __doc__
Ma question est de savoir comment hériter une docstring d'une classe parente en tant qu'attribut __doc__
. L'utilisation est que Django rest framework génère une belle documentation dans la version html de votre API basée sur les docstrings de vos classes d'affichage. Mais lors de l'héritage d'une classe de base (avec une docstring) dans une classe sans docstring, l'API n'affiche pas la docstring.
Il se pourrait très bien que sphinx et d'autres outils fassent la bonne chose et traitent l'héritage de docstring pour moi, mais le cadre de repos de django regarde l'attribut (vide) .__doc__
.
class ParentWithDocstring(object):
"""Parent docstring"""
pass
class SubClassWithoutDoctring(ParentWithDocstring):
pass
parent = ParentWithDocstring()
print parent.__doc__ # Prints "Parent docstring".
subclass = SubClassWithoutDoctring()
print subclass.__doc__ # Prints "None"
J'ai essayé quelque chose comme super(SubClassWithoutDocstring, self).__doc__
, mais aussi ne me suis un None
.
Je vais juste ajouter à partir de ce que je me souviens des discussions que j'ai eues concernant Python à ce sujet. Il n'hérite pas de docstrings par défaut car il est considéré que Python ne peut pas savoir si la docstring aura plus de sens (bien que l'héritage devrait être suffisant pour que le programmeur reste en ligne avec la POO normale pour ne pas changer complètement la signification d'un objet), il a été considéré que le cas où le document était vierge allait être moins trompeur. Cela devient plus complexe là où la classe parente est un ABC par exemple ... –
Dans 3.3 le 'getsd_descriptor'' __doc__' 'est maintenant accessible en écriture pour les types de tas. Avant il avait seulement un «getter» défini; maintenant il a 'setter' [' type_set_doc'] (http://hg.python.org/cpython/file/bd8afb90ebf2/Objects/typeobject.c#l632). 'check_set_special_type_attr' empêche la suppression de' __doc__'. – eryksun
@eryksun: Confirmé; c'est une solution qui était attendue depuis longtemps! Ressuscité mon idée originale de décorateur de classe pour Python 3.3 seulement. –