Una función de Python tiene un objeto de código __code__
.Obtener la función de Python para un objeto de código
A sys.settrace
traza frame
tiene un objeto de código f_code
.
Para aquellas llamadas al rastreador que son funciones, ¿cómo puedo obtener el objeto de función (y su miembro __annotation__
)?
Hasta ahora, por ensayo y error, que tengo:
if hasattr(frame.f_globals.get(frame.f_code.co_name),"__annotations__"):
Esto parece funcionar para las funciones, pero no para las funciones de la clase-miembros; peor aún, confunde funciones de miembros de clase con funciones de nivel superior del mismo nombre.
(. Estoy en Python 3.2.3 (Xubuntu) veo que Python 3.3 inspect
módulo tiene una función signature
; será este devolver la anotación para un objeto de código o lo hace también necesitan un objeto función?)
campo '' function' la tupla de inspect.getframeinfo' parece que hay una cadena en lugar de un objeto función. ¿Y el enfoque de GC arriesga múltiples referencias? – Will
Terminé usando gc.get_referrers (...) [0] – Will
Puede agregar una marca para ver si func_code/__code__ es el objeto de código que desea para la lista de comprensión. Esto aún falla si genera múltiples funciones con cierres diferentes del mismo objeto de código, por ejemplo con un decorador Supongo que uno podría comparar los f_locals contra el conteo de celda del func_closure para cada ... –