Istnieje pytanie na temat Inherit docstrings in Python class inheritance, ale odpowiedzi tam odnoszą się do metod docstrukcji metod.Dziedziczenie docstringu klasy nadrzędnej jako atrybutu __doc__
Moje pytanie brzmi: jak odziedziczyć docstring klasy nadrzędnej jako atrybut __doc__
. W praktyce jest to, że Django rest framework generuje ładną dokumentację w wersji HTML interfejsu API na podstawie docletów klas widoku. Ale po odziedziczeniu klasy bazowej (z docstringiem) w klasie bez docstrukcji, API nie wyświetla docstringu.
Może się zdarzyć, że sfinks i inne narzędzia zrobią to, co trzeba, i zajmą się dla mnie dziedziczeniem docstring, ale struktura reszta django wygląda na (pusty) atrybut .__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"
Próbowałem coś podobnego super(SubClassWithoutDocstring, self).__doc__
, ale również tylko dostał mi None
.
Dodam tylko z tego, co pamiętam o dyskusjach dotyczących Pythona na ten temat. Nie dziedziczy domyślnie docstrukcji, ponieważ uważa się, że skoro Python nie może wiedzieć, czy docstring będzie już znaczący (chociaż dziedziczenie powinno wystarczyć, aby programista utrzymywał zgodność z normalnym OOP, aby nie całkowicie zmienić znaczenia obiekt), uznano, że przypadek, w którym dokument był pusty, był mniej błędny. Jest bardziej skomplikowany, gdy klasa nadrzędna jest na przykład ABC ... –
W wersji 3.3 'get_desktopor' __doc__' jest teraz zapisywalny dla typów sterty. Zanim zdefiniowano tylko 'getter'; teraz ma 'setter' [' type_set_doc'] (http://hg.python.org/cpython/file/bd8afb90ebf2/Objects/typeobject.c#l632). 'check_set_special_type_attr' zapobiega usuwaniu' __doc__'. – eryksun
@eryksun: Potwierdzony; to jest naprawa, która była już dawno spóźniona! Wskrzesiłem mój oryginalny pomysł na dekorator klas tylko w Pythonie 3.3. –