2015-06-25 11 views
5

Mam problem z uzyskaniem sztuczki if __name == '__main__' do pracy w środowisku IPython, Spyder. Próbowałem każde podejście podane w tym wątku: if __name__ == '__main__' in IPythonjeśli __name__ == '__main__' nie działa ipython

Oto moje bardzo uproszczone moduły

Module1.py

Class UnitTest(): 
    print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    print 'Mod2 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Więc biegnę Module2.py i zawsze widzę drukowane zarówno Mod2 UnitTest i. Są one wykonywane w jądrze IPython. Chcę wyświetlić tylko komunikat Mod2 UnitTest.

Każdy pomysł co się dzieje?

+3

Używasz klas zamiast funkcji. Kod w deklaracji klasy jest uruchamiany w czasie importu. – Kevin

+0

Yup. Zobacz moją odpowiedź poniżej. Całkowicie głupi błąd, nieuświadamiając, że kod w deklaracji klasowej jest uruchamiany w czasie importu !!! – AZhao

Odpowiedz

2

Cóż, usunąłem to pytanie wcześniej ze wstydu, ale równie dobrze mógłbym podzielić się nim na wypadek, gdyby jakikolwiek inny newb to zauważył.

Zapomniałem umieścić linię UnitTest wewnątrz metody __init__. Dlatego test jednostkowy był uruchamiany za każdym razem, gdy klasa została zdefiniowana, a nie kiedy obiekt został utworzony. Kod powinien być:

Module1.py

Class UnitTest(): 
    def __init__(self): 
     print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    def __init__(self): 
     print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    print 'Mod2 UnitTest!' 
Powiązane problemy