父类init在继承期间执行

时间:2017-12-15 07:44:24

标签: python oop python-2.x

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 正在执行。

我读到我可以使用

来避免它
if __name__='__main__'

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

1 个答案:

答案 0 :(得分:5)

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

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

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

问题不是继承而是导入。在您的情况下,您在导入时执行obj=test()

from test import test

导入test时,其名称__name__test。 但是当您使用python test.py作为主程序在命令行上运行程序时,其名称为__main__。因此,在导入的情况下,如果您使用:

,则跳过obj=test()
if __name__ == '__main__':
     obj=test()