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正在执行,因为我只是在我的第二个文件中导入这个类,对象创建代码是如何执行的?
答案 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()