Próbuję zrobić dziedziczenie klas w Pythonie. Chciałbym, żeby każda klasa i klasa odziedziczona miała dobre dokumenty. Więc myślę, że dla klasy odziedziczonej chciałbym:
- dziedziczy dokumentację klasy bazowej
- może dołączyć odpowiednią dodatkową dokumentację do dokumentu
Czy istnieje jakikolwiek (prawdopodobnie elegancki lub pytoniczny) sposób wykonywania tego rodzaju manipulacji dokumentacją w sytuacji dziedziczenia klas? Co powiesz na wielokrotne dziedziczenie?
python
inheritance
documentation
Craig McQueen
źródło
źródło
inspect.getdoc
będzie przeszukiwać drzewo dziedziczenia, aż znajdzie ciąg dokumentów.Odpowiedzi:
Nie jesteś jedyny! Niedawno odbyła się dyskusja na
comp.lang.python
ten temat i powstał przepis. Sprawdź to tutaj .źródło
Możesz łatwo łączyć dokumenty:
Jednak jest to bezużyteczne. Większość narzędzi do tworzenia dokumentacji (w tym Sphinx i Epydoc ) będzie już pobierać macierzysty ciąg dokumentów, w tym dla metod. Więc nie musisz nic robić.
źródło
Niezbyt eleganckie, ale proste i bezpośrednie:
Teraz:
źródło
Init docstring
również w przypadku, czy istnieje sposób, aby to zrobić w definicjiY
? Jedynym sposobem udało mi się zrobić to przy użyciu__init__.__doc__ = X.__init__.__doc__ + " Also another param"
zgodnie z__init__
definicją zawartą wY
ale to wydaje się bałagan z formatowaniem, powodując dodatkowo dodawane spacje.Mieszany styl, który może zachować zarówno dziedziczoną składnię ciągów dokumentów, jak i preferowaną kolejność, może być:
Z takim samym wyjściem jak Alex:
Cienki lód: zabawa z ciągiem dokumentów może sprawić, że twój moduł będzie bezużyteczny
python -OO
, spodziewaj się:źródło
Napisałem custom_inherit, aby zapewnić proste, lekkie narzędzia do obsługi dziedziczenia dokumentów.
Zawiera również kilka ładnych domyślnych stylów do łączenia różnych typów ciągów dokumentów (np. Numpy, Google i reST). Możesz również bardzo łatwo nadać swój własny styl.
Nakładające się sekcje docstringowe będą odkładały się do sekcji dziecka, w przeciwnym razie zostaną połączone razem z ładnym formatowaniem.
źródło