为什么我的Python类会被执行两次?跨文件导入触发重复输入问题
问题原因
- 缺少模块入口判断:你直接把用户输入、逻辑判断代码放在main.py的顶层,没有包裹在
if __name__ == "__main__":块中。Python中当一个.py文件被作为模块导入时,会默认执行所有顶层代码,你的二次输入就是main.py被test.py导入时触发的。 - 循环导入逻辑错误:main.py导入test模块,test模块的方法又反过来导入main模块,形成循环依赖,同时因为主模块命名规则(直接运行的模块名为
__main__,不是文件名),导致main被重复加载执行。 - 不必要的跨模块变量读取:你完全可以把输入内容作为参数传递给test方法,不需要在test中反向导入main的变量,这是引发本次问题的核心诱因。
修复方案
修改后的main.py代码
# this is main.py if __name__ == "__main__": test_input = input('give me an input: ') if 'i like cookies' in test_input: from test import test_class # 直接把输入作为参数传递给方法 test_class.test(test_input)
修改后的test.py代码
# this is test.py class test_class(): # 静态方法装饰器,适配无self参数的调用 @staticmethod def test(input_content): print(input_content)
修复逻辑说明
- 加了
if __name__ == "__main__":判断后,只有直接运行main.py时才会执行输入和逻辑代码,作为模块被导入时不会运行,就不会出现第二次输入提示。 - 取消了test方法中对main模块的导入,改为参数传递,彻底解决循环导入问题,不会触发重复执行逻辑,也就不会出现多次打印的情况。
- 加
@staticmethod是为了规范类下无实例参数方法的调用,避免部分Python版本抛出调用参数不匹配的异常。
内容的提问来源于stack exchange,提问作者Scripter1
相关产品推荐
相关产品推荐

