2010-09-06 10 views
16

W szczególności potrzebuję uzyskać niektóre obiekty i globale z modułu głównego w importowanym module. Wiem, jak znaleźć te rzeczy, gdy moduł macierzysty chce czegoś konkretnego z modułu podrzędnego, ale nie mogę wymyślić, jak iść w innym kierunku.W Pythonie, w jaki sposób uzyskać dostęp do przestrzeni nazw modułu głównego z zaimportowanego modułu?

+0

Cóż, w porządku, zakładam, że tak musi być, ponieważ nie mogę znaleźć nigdzie żadnej odpowiedzi na ten temat. Najważniejsze jest to, że nie jestem zainteresowany ponownym użyciem żadnego z tego kodu, próbuję po prostu podzielić ten projekt na wiele plików, aby łatwiej było znaleźć to, czego szukam. Naprawdę nie wiem, co robię, szczerze mówiąc, więc to była nauka, ale tak naprawdę chcę, żeby łatwiej było znaleźć kod, który chcę edytować, kiedy chcę go edytować. – Damon

+0

Zgadzam się, że powinien istnieć sposób przekazywania parametrów do modułu podczas importowania - tak jak w przypadku przekazywania ich do konstruktora obiektów. Jednak nigdy nie udało mi się znaleźć tego w czysty sposób. – martineau

+2

Szukałem dokładnie tego samego z dokładnie tego samego powodu, więc wydaje się, że to typowa rzecz dla początkujących .. – sfranky

Odpowiedz

12
import __main__ 

Ale nie rób tego.

+3

dlaczego tego nie robisz? – Alcott

+5

@Alcott: Ponieważ może bardzo łatwo zamienić twój program w precla. –

+1

@ Ignacio Vaazquez-Abrams możesz rozwinąć? –

1

Nie jestem pewien, czy jest to dobra praktyka, ale może mógłbyś przekazać obiekty i zmienne, które potrzebujesz jako parametry, do metod lub klas, które wywołasz w importowanym module.

3

myślę, że to będzie działać:

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

Jest to równoważne 'importowi __main__ jako main_mod'. –

9

odpowiedź szukasz jest:

import __main__ 

main_global1= __main__.global1 

Jednak, gdy moduł module1 potrzebuje rzeczy z modułu __main__, a następnie:

  • albo moduł __main__ powinien dostarczyć wszystkie niezbędne dane parametry do funkcji/klasy module1,
  • lub należy umieścić wszystko, co należy udostępnić w innym module, i zaimportować jako import module2 w obu __main__ i module1.
Powiązane problemy