en Python 2.5, tengo el siguiente código en un módulo llamado modtest.py:¿Cómo obtengo el nombre del módulo de la definición de clase de un objeto en lugar del nombre del módulo de la instanciación del objeto?
def print_method_module(method):
def printer(self):
print self.__module__
return method(self)
return printer
class ModTest():
@print_method_module
def testmethod(self):
pass
if __name__ == "__main__":
ModTest().testmethod()
Sin embargo, cuando ejecuto esto, se imprime:
__main__
si creo un segundo archivo modtest2.py llamada y ejecutarlo:
import modtest
if __name__ == "__main__":
modtest.ModTest().testmethod()
Esto muestra:
modtest
¿Cómo puedo cambiar el decorador para que siempre imprima modtest
, el nombre del módulo en el que se define la clase?
Esta es una buena respuesta. ¿Es posible obtener la ruta completa del módulo como la devuelve el propio .__ module__ en lugar de solo el nombre del archivo del módulo? –
No estoy seguro de que pueda hacer eso con precisión con facilidad. Podrías aproximarlo caminando por el árbol del directorio (comenzando con el directorio de '__file__') y buscando archivos llamados' __init __. Py' en cada uno, deteniéndote cuando no encuentras uno, y luego machacando los segmentos del camino junto con puntos. Esperaría que esto difiera de la verdadera ruta completa del módulo en algunos casos. –
Este método podría funcionar, pero para dos módulos python de relación desconocida ¿es posible obtener el directorio del archivo? –