¿Cómo puedo obtener una referencia a un módulo desde ese módulo? Además, ¿cómo puedo obtener una referencia al paquete que contiene ese módulo?Python: ¿Cómo obtengo una referencia a un módulo dentro del módulo?
Respuesta
import sys
current_module = sys.modules[__name__]
excepto por esto no será del todo correcto si el módulo se vuelve a cargar; No creo que haya ningún lugar donde se garantice el mantenimiento de una referencia, si existiera, la recarga no funcionaría realmente, ¿verdad? –
Recargar reutiliza el mismo objeto de módulo; no se crea un nuevo objeto de módulo, por lo que sigue siendo correcto en el momento de volver a cargarlo. – bukzor
Si usted tiene una clase en ese módulo, entonces la propiedad __module__
de la clase es el nombre del módulo de la clase. Por lo tanto, puede acceder al módulo a través del sys.modules[klass.__module__]
. Esto también funciona para funciones.
En realidad, parece que (al menos) para una función, la propiedad '__module__' no es un módulo, pero una cadena; de este modo un 'inspect.getabsfile (func .__ módulo __)' falla con "_TypeError: 'os' no es un módulo, clase, método, función, rastreo, marco o object_ código"; mientras que 'inspect.getabsfile (sys.modules [o .__ module __])' parece pasar. – sdaau
Gracias, lo arreglaron. – Michael
, usted puede obtener el nombre del módulo actual utilizando __name__
La referencia del módulo se pueden encontrar en el diccionario sys.modules
.
Véase el pitón documentation
Aprecio el enlace de doc. –
Una más técnica, que no importa el módulo sys, y podría decirse - depende de su gusto - más simple:
current_module = __import__(__name__)
Tenga en cuenta que no hay importación. Python importa cada módulo solo una vez.
Esto parece una muy buena manera de evitar la importación de sys. Aparte de ser un poco contra-intuitivo para leer ¿hay posibles desventajas de este enfoque? – JeremyDouglass
@JeremyDouglass. No que yo supiese. __import__ es una función legítima, documentada e incorporada (la única función __xx__). Puede reemplazarlo con el paquete 'importlib' (tendrá que importarlo). Tal vez - nunca ocurrió a mí - usted podría tener un problema con la importación relativo/absoluto, si un módulo con el mismo nombre está disponible en sys.path, en cuyo caso se puede resolver con el argumento de 'nivel' de la función. – Uri
Puede pasar desde el exterior:
mymod.init(mymod)
No es ideal, pero funciona para mi caso de uso actual.
- 1. Python: ¿por qué un módulo importado no puede hacer referencia a otro módulo importado?
- 2. Dependencia del módulo Python
- 3. Cómo obtener una referencia a los atributos del módulo actual en Python
- 4. ¿Cómo obtengo el número de versión de un módulo de Python a través del código?
- 5. requieren archivo dentro del módulo?
- 6. Desarrollo del módulo de Python
- 7. ¿Cómo hacer referencia al módulo de nivel superior en Python dentro de un paquete?
- 8. descargar un módulo en Python
- 9. Declarar una clase dentro de un módulo
- 10. extraer un módulo Python importada
- 11. ¿Cómo escribir una referencia de función en un módulo Perl?
- 12. Cómo agregar una propiedad a un módulo en boost :: python?
- 13. constantes en Python: en la raíz del módulo o en un espacio de nombres dentro del módulo?
- 14. Llamar a un módulo Perl desde Python
- 15. VB.NET: ¿Cómo hacer referencia al módulo VB.NET?
- 16. ¿Cómo obtengo la instancia del módulo para una clase en Python?
- 17. ¿Cómo puedo anular una constante en un módulo Python importado?
- 18. Mostrar parcelas dentro del módulo en Mathematica
- 19. Intentando imprimir cada submódulo dentro de un módulo en python
- 20. ¿Llamar a una función desde cadena dentro del mismo módulo en Python?
- 21. tuberías de cáscara a través del módulo de Python subproceso
- 22. Cómo des-importar un módulo de Python?
- 23. Incluyendo un módulo en otro módulo
- 24. Cómo quitar un módulo del núcleo no
- 25. En Python, ¿cómo puedo acceder al espacio de nombres del módulo principal desde un módulo importado?
- 26. Orden de inicialización del módulo de Python?
- 27. de. * importación del módulo
- 28. ¿Cómo puedo documentar un módulo en Python?
- 29. Consumo de memoria del módulo Python Shelve
- 30. diseño de módulo de python
que sospechan que podría estar haciendo esta pregunta porque tiene una variable en ** ** ámbito de módulo (por ejemplo, bla = 10 fuera de una función o clase), BLA entonces una variable de clase/función ** ** nombrado, y quieres diferenciar Una pregunta válida aquí es: ¿Es esto necesario ** ** Las reglas de ámbito son notoriamente propensos a error, especialmente por el 'idiota' que recoge el código después (es decir, que, 6 meses después). Trucos como este rara vez son necesarios; Intento evitarlos por completo porque a menudo son confusos y se modifican erróneamente más adelante. –
@ KevinJ.Rice "el 'idiota' que recoge el código después (es decir, que, 6 meses después)" hizo que mi día! – arctelix
¿A quién le importa por qué está haciendo la pregunta? Hay muchas razones válidas para necesitar hacer esto. –