如果 __name__ == '__main__' 在 ipython 中无效

10

我在IPython、Spyder环境中使用if __name__ == '__main__'技巧遇到了麻烦。我尝试了这个主题中提供的所有方法:if __name__ == '__main__' in IPython

这是我的超级简化模块:

Module1.py

Class UnitTest():
    print 'Mod1 UnitTest!'

if __name__ == '__main__':
    UnitTest()

模块2.py

import Module1

Class UnitTest():
    print 'Mod2 UnitTest!'

if __name__ == '__main__':
    UnitTest()
所以我运行Module2.py时,总是看到Mod2 UnitTestMod1 UnitTest都被打印出来。这些在一个IPython内核中执行。我只想要显示Mod2 UnitTest的信息。你有什么想法?

4
你正在使用类而不是函数。类声明中的代码在导入时运行。 - Kevin
是的。请看下面我的回答。完全愚蠢的错误,没有意识到类声明中的代码在导入时运行! - AZhao
1个回答

7

这里我先删除了之前的问题,因为觉得很尴尬,但还是分享一下,以便其他新手参考。

我忘记把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!'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接