从一个模块的函数调用另一个模块的 if __name__ == '__main__':

3 投票
2 回答
7839 浏览
提问于 2025-04-28 12:38

我需要在一个模块中调用 if __name__ == '__main__',这个模块叫 Module 1,它会在一个函数 function1 中调用几个类,而这个函数是在另一个模块 Module 2 的一个类里。

我不能在 Module 1 中用 def main() 来替代 if __name__ == '__main__',因为这个模块里有好几个类和函数,它们都和 Module 1 中的 Class_1 有关系,而这些只在 print('I am:', __name__)if __name__ == '__main__': 的情况下才能正常工作。

所以我的问题是,如何从 Module 2 中的 Class_2() 里的 function1 调用 Class_1()if __name__ == '__main__' 呢?

Module 1

print('I am:', __name__)

class Class_1():
   ....code...

# calling everything in the module that
if __name__ == '__main__':

Module 2

# if __name__ == '__main__' from Module 1 should be called in function 1


class Class_2():
   .... code..

   def function1:
    --- calling main if __name__ == '__main__' from Module 1
暂无标签

2 个回答

1

if __name__... 这个写法的主要目的就是用来处理那些只有在模块作为脚本执行时才需要的东西,也就是说,当这个模块不是被其他类导入的时候才会用到。所以,不,你不需要这样做。

你说的为什么不能把东西放进函数里的解释没有道理;其实,正是应该这样做。

4

在Python中,if __name__ == '__main__' 主要是用来让一个单独的Python脚本可以直接运行。比如说,你定义了一个函数来完成某个任务,你可以通过导入这个函数来使用它,但你也希望当你用 python module1.py 运行你的Python脚本时,这个函数也能被执行。

针对你问的问题,我能想到的最好解释是,你希望在运行 "module2.py" 时,能够执行在 "module1.py" 中定义的一个函数。这个过程大概是这样的:

### module1.py:
def main():
    # does something
    ...

if __name__ == '__main__':
    main()

### module2.py:
from module1 import main as main_from_module_one

if __name__ == '__main__':
    main_from_module_one()  # calling function main defined in module1

撰写回答