代码之家  ›  专栏  ›  技术社区  ›  syam

继承期间正在执行父类init

  •  0
  • syam  · 技术社区  · 7 年前

    OOP中的一个基本问题。

    test.py 文件内容:

    class test(object):
        def __init__(self):
            print 'INIT of test class'
    
    obj = test()
    

    然后我打开了另一个文件。

    我刚刚继承了上面的测试类:

    from test import  test
    
    class test1(test):
        def __init__(self):
            pass
    

    所以当我运行第二个文件时 __init__() 从父类执行(INIT已打印)。

    我读到我可以通过使用

    if __name__ == '__main__':
        # ...
    

    我可以克服这个问题,但我的问题是为什么父类的init正在执行,因为我只是在第二个文件中导入这个类。为什么要执行对象创建代码?

    1 回复  |  直到 2 年前
        1
  •  5
  •   Mike Müller    7 年前

    导入模块将执行所有模块级语句,包括 obj=test() . 要避免这种情况,请仅在作为主程序运行时创建实例,而不是在导入时创建实例:

    class test(object):
        def __init__(self):
            print 'INIT of test class'
    
    if __name__ == '__main__':
         obj=test()
    

    问题不在于继承,而在于导入。在你的情况下,你执行 obj=测试() 导入时:

    from test import test
    

    导入时 test ,其名称 __name__ 测验 . 但当您在命令行上以主程序的形式运行程序时 python test.py ,其名称为 __main__ . 因此,在导入的情况下,您可以跳过 obj=测试() 如果您使用:

    if __name__ == '__main__':
         obj=test()