2015-06-25 5 views
5

У меня возникли проблемы с получением трюка if __name == '__main__' для работы в среде IPython, Spyder. Я перепробовал все подходы, приведенные в этой теме: if __name__ == '__main__' in IPythonif __name__ == '__main__' не работает ipython

Вот мои супер упрощенные модули

Module1.py

Class UnitTest(): 
    print 'Mod1 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Module2.py

import Module1 

Class UnitTest(): 
    print 'Mod2 UnitTest!' 

if __name__ == '__main__': 
    UnitTest() 

Так я бегу Module2.py и я всегда вижу как Mod2 UnitTest, так и Mod1 UnitTest. Они выполняются в ядре IPython. Я хочу только сообщение Mod2 UnitTest для отображения.

Любая идея, что случилось?

+3

Вы используете классы вместо функций. Код в объявлении класса запускается во время импорта. – Kevin

+0

Yup. См. Мой ответ ниже. Полностью глупая ошибка, не реализующая код в объявлении класса, запускается во время импорта !!! – AZhao

ответ

2

Ну, я удалил этот вопрос раньше из-за смущения, но мог бы также поделиться, если любой другой новый видит это.

Я забыл поместить линию UnitTest внутри метода __init__. Таким образом, единичный тест запускался каждый раз, когда был определен класс, а не когда объект был создан. Код должен быть:

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!' 
Смежные вопросы