Jak mogę wyprowadzić Docstring funkcji Pythona z samej funkcji?
Chcę wydrukować wiersz dokumentu funkcji Pythona z samej funkcji.
na przykład.
def my_function(self):
"""Doc string for my function."""
# print the Docstring here.
W tej chwili robię to zaraz po definicji
my_function.
print my_function.__doc__
Ale lepiej pozwolić funkcji zrobić to sama.
Próbowałem zadzwonić do
print self .__ doc__
print self.my_function .__ doc__i
print this .__ doc__inside my_function, ale tak się nie stało praca.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
8 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
To zadziała, o ile nie zmienisz obiektu przypisanego do nazwy .
Sytuacje, w których byś to zrobił, są dość rzadkie, ale zdarzają się.
Jeśli jednak napiszesz dekoratora w ten sposób:
Teraz możesz to zrobić:
A to gwarantuje, że twoja funkcja otrzyma odwołanie do samej siebie (podobnie do ) jako pierwszy argument, dzięki czemu zawsze może uzyskać ciąg dokumentów do właściwej funkcji. W przypadku użycia w metodzie zwykłe staje się drugim argumentem.
Anonimowy użytkownik
Potwierdzenie od:
Przykłady dla klasy, metody i funkcji. Powiedz mi, czy tego nie szukałeś :)
Anonimowy użytkownik
Potwierdzenie od:
w Pythonie 2.7.1
To też działa:
Jednak to nie zadziała samodzielnie:
NameError: nazwa globalna „moja_funkcja” jest niezdefiniowana
Anonimowy użytkownik
Potwierdzenie od:
I robi to, co chcesz.
Nie dzieje się tu nic specjalnego. Wszystko, co się dzieje, polega na tym, że wykonując w funkcji, opóźnia ona rozdzielczość atrybutu wystarczająco długo, aby wyszukać na nim , aby działał zgodnie z oczekiwaniami.
Używam tego z docopt do punktów wejścia skryptów konsoli.
Anonimowy użytkownik
Potwierdzenie od:
W przypadku metody klasowej najlepszym rozwiązaniem byłoby .
Jeśli nie chcesz podawać nazwy metody, ale zamiast tego przekazać do niej zmienną, możesz użyć wbudowanych funkcji hasattr (obiekt, atrybut) i getattr (obj, attr), które robią to, co mówią, pozwalając ci przekazywać zmienne, których nazwa metody jest napisem. dawny.
Anonimowy użytkownik
Potwierdzenie od:
równoważny
Jeśli chcesz spojrzeć na linię dokumentu wywołującego, to nadal nie będzie działać, ponieważ twój pomocnik drukowania może znajdować się w zupełnie innym module z zupełnie innym słownikiem globals (). Jedynym właściwym wyborem jest zajrzenie do ramki stosu, ale Python nie daje ci wykonywalnego obiektu funkcji, ma tylko odniesienie do obiektu kodu „f_code”. Ale kontynuuj, ponieważ istnieje również link do „f_globals” tej funkcji. Możesz więc napisać funkcję, która w ten sposób pobierze dokument wywołującego, a jako jej odmianę, otrzymasz swój własny opis.
i poszedłem to sprawdzić:
skutkuje tym wyjściem
W rzeczywistości większość ludzi chce, aby ich własny ciąg dokumentacyjny był przekazywany tylko jako argument, ale wywołana funkcja pomocnicza może go samodzielnie szukać. Używam tego w moim Unittest Code, gdzie czasami przydatne jest wypełnienie niektórych dzienników lub użycie wiersza dokumentu jako danych testowych. To dlatego udostępniona funkcja get_caller_doc () szuka tylko globalnych funkcji testowych i funkcji składowych klasy testowej, ale myślę, że jest to wystarczające dla większości ludzi, którzy chcą wiedzieć o linii dokumentu.
Aby określić poprawną get_frame_doc (ramkę) za pomocą sys._getframe (1), pozostaje reader ().
Anonimowy użytkownik
Potwierdzenie od:
(*) Brak dwukropka po ( )
Anonimowy użytkownik
Potwierdzenie od: