2010-09-06 21 views
16

Específicamente, necesito llegar a algunos objetos y globales desde el módulo principal en un módulo importado. Sé cómo encontrar esas cosas cuando el módulo padre quiere algo particular de un módulo secundario, pero no puedo imaginarme cómo ir en la otra dirección.En Python, ¿cómo puedo acceder al espacio de nombres del módulo principal desde un módulo importado?

+0

Bueno, está bien, supongo que debe ser el caso, ya que no puedo encontrar ninguna respuesta sobre esto en ninguna parte. La conclusión es que no me preocupa volver a utilizar este código, solo intento dividir este proyecto en varios archivos para que sea más manejable encontrar lo que estoy buscando. Realmente no sé lo que estoy haciendo, sinceramente, así que esta ha sido una experiencia de aprendizaje, pero realmente solo quiero que sea más fácil encontrar el código que quiero editar cuando quiero editarlo. – Damon

+0

Acepto que debe haber una manera de pasar parámetros a un módulo cuando se importa, como cuando se los pasa a un constructor de objetos. Sin embargo, nunca he encontrado una manera limpia de hacer esto. – martineau

+2

Estaba buscando exactamente lo mismo por la misma razón, por lo que parece que es una cosa novata típica. – sfranky

Respuesta

12
import __main__ 

Pero no hagas esto.

+3

¿por qué no hacer esto? – Alcott

+5

@Alcott: Porque puede convertir fácilmente su programa en un pretzel. –

+1

@ IgnacioVazquez-Abrams ¿puede ampliar eso? –

1

No estoy seguro de si es una buena práctica, pero tal vez podría pasar los objetos y las variables que necesita como parámetros a los métodos o clases que llama en el módulo importado.

3

Creo que esto funcionaría:

import sys  
main_mod = sys.modules['__main__'] 
+0

Esto es equivalente a 'import __main__ como main_mod'. –

9

La respuesta que está buscando es:

import __main__ 

main_global1= __main__.global1 

Sin embargo, cada vez que un módulo de module1 necesita cosas desde el módulo __main__, entonces:

  • el módulo __main__ debe proporcionar todos los datos necesarios como parámetros a una función/clase module1,
  • o debe poner todo lo que necesita ser compartido en otro módulo, e importarlo como import module2 en ambos __main__ y module1.
Cuestiones relacionadas