Funkcja Pythona ma obiekt kodu __code__
.Uzyskiwanie funkcji Pythona dla obiektu kodu
A sys.settrace
ślad frame
ma obiekt kodowy f_code
.
Dla tych wywołań funkcji śledzącej, w jaki sposób mogę uzyskać obiekt funkcji (i jego element __annotation__
)?
Dotychczas metodą prób i błędów, mam:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
To wydaje się działać dla funkcji, ale nie dla funkcji klasy członkowskich; gorzej, myli funkcje członka klasy z funkcjami najwyższego poziomu o tej samej nazwie.
(. Mam na Python 3.2.3 (Xubuntu) widzę, że Python 3.3 inspect
moduł ma signature
funkcji; będzie to powrót adnotacji dla obiektu kodu czy też zbyt potrzebują obiektu funkcji?)
katalogu '' inspect.getframeinfo' krotka w polu zakresie funkcji wydaje się być ciągiem, a nie obiekt funkcji. A podejście gc może zagrozić wielu polecającym? – Will
Skończyło się na użyciu gc.get_referrers (...) [0] – Will
Możesz dodać czek, aby sprawdzić, czy func_code/__ code__ jest obiektem kodu, który chcesz zrozumieć na liście. To nadal kończy się niepowodzeniem, jeśli wygenerujesz wiele funkcji za pomocą różne zamknięcia z tego samego obiektu kodu, np z dekoratorem. Przypuszczam, że można porównać f_locals przeciwko zawartość cell_contents z func_closure dla każdego ... –