为什么导入Python类时,类定义外的代码也会被执行?
问题原因
Python导入任意模块时,会从头到尾执行该模块所有顶层作用域的代码——也就是没有缩进、不属于任何类/函数定义的代码。你写在Exercise_7.py末尾的测试代码就是顶层代码,导入的时候自然会被执行。
每个Python文件都有一个内置的__name__属性:
- 如果你直接运行该文件(比如直接跑
python Exercise_7.py),它的__name__值会被自动设为"__main__" - 如果你是在其他文件里导入该文件作为模块,它的
__name__值会被设为模块自身的名字(这里就是"Exercise_7")
解决方法
把Exercise_7.py里你不希望导入时执行的测试代码,全部放到if __name__ == "__main__":的判断块里就行,修改后的Exercise_7.py末尾代码如下:
# --- 不希望被导入时执行的测试代码 --- if __name__ == "__main__": vehicle1 = Vehicle("Car", (3,5), "red", False) vehicle1.updateVelocity((2,6)) vehicle1.allAttributes() print(vehicle1.emissions(100))
修改后:
- 直接运行Exercise_7.py时,判断条件成立,测试代码正常执行,不影响你单独调试Vehicle类
- 从Exercise_8.py导入Vehicle类时,判断条件不成立,测试代码不会运行,只会执行类定义等你需要的内容
内容的提问来源于stack exchange,提问作者lenawb
相关产品推荐
相关产品推荐

