调用 if __name__ == '__main__':在一个模块中从另一个模块中的函数 [关闭]

Posted

技术标签:

【中文标题】调用 if __name__ == \'__main__\':在一个模块中从另一个模块中的函数 [关闭]【英文标题】:Calling if __name__ == '__main__': in one module from a function in another module [closed]调用 if __name__ == '__main__':在一个模块中从另一个模块中的函数 [关闭] 【发布时间】:2014-12-15 06:58:48 【问题描述】:

我需要调用if __name__ == '__main__',它在一个模块Module 1 中调用多个类,在一个函数function1 中调用第二个模块Module 2 中的一个类。

我不能在Module 1 中使用def main()- 解决方案而不是if __name__ == '__main__',因为该模块有几个类和函数连接到Module 1 中的Class_1,仅适用于print('I am:', __name__) 和@987654332 @。

所以我的问题是如何调用 main: if __name__ == '__main__' from Class_1() in function1 in Class_2() in Module 2?

模块 1

print('I am:', __name__)

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

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

模块 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

【问题讨论】:

...什么?!你不能调用 if __name__ == "__main__" - 这不是一个函数。 我可以像在 main 函数中那样调用它,但是当我将 Module1 中的脚本从 if name == " 更改时遇到了很多麻烦main" 到 def main() 以便在 Class_2、Module2 中的 function1 中调用 Module1.main(),这就是我正在寻找另一个解决方案的原因。 您能否使用main 提供代码的minimal example 并准确解释它有什么问题(输入和完整回溯或预期和实际输出)?您在这里尝试的方法对您不起作用。 【参考方案1】:

if __name__...全部意义在于它仅用于在模块作为脚本执行时才需要的东西,即如果它没有被导入从另一个班级。所以不,你不需要这样做。

您对为什么不能将事物放入函数的解释毫无意义;这正是你应该做的。

【讨论】:

抱歉不清楚,我的目的是将Module1中的脚本导入Module2,而不是相反。 Module1 中 if name == "main" 的脚本只能在 Class_2 中的 function1 中调用,Module2 @user1749431 那么你不应该使用if __name__ == "__main__" 根本;那是在模块没有导入的时候。【参考方案2】:

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

【讨论】:

以上是关于调用 if __name__ == '__main__':在一个模块中从另一个模块中的函数 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python if __name__ == '__main__': 理解

if__name__==__main__

unittest: if __name__ == "__main__" 理解

if __name__==__main__:的应用

如何简单理解Python中的if __name__ == '__main__':

if __name__ == '__main__'的理解