2012-03-16 9 views
6

Python docstring musi być podany jako łańcuch literowy; ale czasami przydatne jest posiadanie podobnych docstrukcji dla kilku funkcji (np. różnych konstruktorów) lub kilka metod dostępu może akceptować tę samą listę argumentów (a następnie polegać na tej samej ukrytej metodzie), więc byłoby miło użyć tego samego opis wszędzie. W takich przypadkach mogę skonstruować docstring przez przypisanie do __doc__, co robię za pomocą prostego dekoratora. System działa bardzo ładnie (w python 2) i jestem zadowolony z tego, jak prosty, przejrzysty i dobrze zamknięty jest.Modyfikowanie języka Pythona z dekoratorem: czy to dobry pomysł?

Pytanie: Czy to dobry pomysł? W szczególności, czy istnieją narzędzia, które mogłyby zostać zdezorientowane przez tę konfigurację (np. Wszystko, co wyodrębnia docstrukcje ze źródła, a nie z kodu bajtowego). Czy rozwiązanie nadal będzie działało w Pythonie 3? Czy istnieją inne przyczyny lub okoliczności, które sprawiają, że jest to niewskazane?

+0

"różnych konstruktorów"? Zakładam, że masz na myśli pewne funkcje fabryczne, ponieważ możesz mieć tylko jedno '__init__'. –

+0

Nie uważam, że "funkcja fabryczna" jest właściwa. Miałem na myśli statycznych członków klasy, które tworzą instancję tej samej klasy. Wszyscy byliby polimorficznymi konstruktorami w języku, który obsługuje to bezpośrednio. Ale tak, funkcje fabryczne mogą być kolejnym przypadkiem użycia. – alexis

+0

Uważałbym, że to rodzaj fabryki, tak. Nie ma żadnej różnicy pomiędzy statycznymi funkcjami członków i darmowymi funkcjami (do używania terminologii C++), oprócz przestrzeni nazw. Chociaż Python ma oddzielne pojęcia "metody klasy" i "metody statycznej". –

Odpowiedz

4

Nie należy łamać żadnych narzędzi i powinien pracować na Python 3.

To jest ok, jeśli to nie boli A IE czytelność kodu źródłowego, nadal można dowiedzieć się, co robi funkcja i jak używać to.

Problem może polegać na tym, że maskuje on zły projekt. Jeśli kilka metod używa tej samej listy argumentów, kod powinien zostać refaktoryzowany (utworzyć obiekt, który działa z listą), a nie łatany przez generowanie powtarzalnych poleceń.

+0

Dzięki! Dobrze słyszeć. Myślę, że projekt jest w porządku: wszystkie metody wywołują tę samą metodę implementacji i wykonują takie czynności, jak zwracanie wyników wyszukiwania (z treści obiektu) w różnych formatach. Miło jest mieć różne nazwy w interfejsie dla różnych operacji, a poza tym istnieje istniejący interfejs API ze znormalizowanymi nazwami. Jeśli chodzi o docstrukcje, dość łatwo jest spojrzeć na metodę implementacji podczas czytania kodu źródłowego. Jednak w przypadku interaktywnej pomocy metody interfejsu powinny być udokumentowane. – alexis

+0

Ponownie otworzył pytanie, ponieważ mam nadzieję usłyszeć więcej informacji na ten temat. Bez obrazy! – alexis

Powiązane problemy