Quiero obtener el número de línea de una función python en el código fuente. lo que tengo en tiempo de ejecución es el módulo, clase, método objetos¿Cómo obtener el número de línea de función (con/sin decorador) en un módulo de python?
echado un vistazo a inspeccionar
inspect.getsourcelines(object)
que también da el número de línea en el resultado.
Veo que para los métodos con decoradores, la línea no. devuelto desde arriba inspecciona los puntos de función al código fuente del decorador real en lugar del código fuente de la función deseada. Entonces, ¿hay alguna manera de solucionar esto? (entiendo que el intérprete hace algo así como envolviendo la función dentro del decorador en tiempo de ejecución, pero podría estar equivocado)
Ya veo, gracias por la explicación. Incluso con 'func_code' estoy obteniendo la línea no. del código fuente decorador. Procederé ignorando la configuración de la línea no. para métodos con cualquier decorador. Mi pregunta ahora es cómo encontrar un método que tenga _any_ decorator o no (nombre del decorador no conocido anteriormente) – Hari
@Hari: un decorador puede devolver lo que quiera (incluso algo que no sea un cierre o incluso la misma función que éste) obtuve entrada, posiblemente haciendo algún otro cálculo antes de devolverlo), por lo que no hay un método 100% seguro para saber si una función ha sido decorada o no, dado el objeto de función. – 6502