父类init在继承期间执行

sya*_*yam 0 python oop python-2.x

OOP中的一个基本问题.

test.py 文件内容:

class test(object):
    def __init__(self):
        print 'INIT of test class'
obj=test()
Run Code Online (Sandbox Code Playgroud)

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

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

from test import  test
class test1(test):
    def __init__(self):
        pass
Run Code Online (Sandbox Code Playgroud)

所以当我运行这个类时,父类的init正在执行.

我读到我可以通过使用来避免它

if __name__='__main__'
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ler 5

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

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

if __name__ == '__main__':
     obj=test()
Run Code Online (Sandbox Code Playgroud)

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

from test import test
Run Code Online (Sandbox Code Playgroud)

导入时test,其名称__name__test.但是当您在命令行上运行程序作为主程序时python test.py,其名称是__main__.因此,在导入的情况下,obj=test()如果您使用以下内容,则跳过:

if __name__ == '__main__':
     obj=test()
Run Code Online (Sandbox Code Playgroud)