2015-06-25 40 views
5

Non riesco a trovare il trucco if __name == '__main__' per funzionare in un ambiente IPython, Spyder. Ho provato ogni impostazione data in questa discussione: if __name__ == '__main__' in IPythonse __name__ == '__main__' non funziona ipython

Qui sono i miei moduli super-semplificato

Module1.py

Class UnitTest(): 
    print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    print 'Mod2 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Così corro Module2.py e sto sempre vedendo sia Mod2 UnitTest sia Mod1 UnitTest stampati. Questi sono in esecuzione in un kernel IPython. Voglio solo il messaggio Mod2 UnitTest da visualizzare.

Qualche idea su cosa succede?

+3

Si utilizza classi invece di funzioni. Il codice in una dichiarazione di classe viene eseguito al momento dell'importazione. – Kevin

+0

Sì. Vedi la mia risposta qui sotto. Errore totalmente stupido non rendersi conto che il codice nella dichiarazione di classe viene eseguito al momento dell'importazione !!! – AZhao

risposta

2

Bene, ho cancellato questa domanda in precedenza per imbarazzo, ma potrei anche condividere nel caso in cui un altro newb lo vede.

Ho dimenticato di inserire la linea UnitTest all'interno del metodo __init__. Quindi il test unitario veniva eseguito ogni volta quando veniva definita la classe e non quando l'istanza veniva istanziata. Il codice dovrebbe essere:

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!'