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正在执行,因为我只是在我的第二个文件中导入这个类,对象创建代码是如何执行的?
导入模块会执行所有模块级语句,包括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)