如何从包含main_file中定义的对象的另一个文件调用函数?



我有这两个文件:
main.py

def func_a():
return object_a.method()

class ClassA:
def __init__(self):
pass
def method(self):
return "k"

if __name__ == '__main__':
object_a = ClassA()
print(func_a())
import file_1

和file_1.py

import main

print(main.func_a())

我得到这些错误:

Traceback (most recent call last):
File "C:UsersUtentePycharmProjectspythonProjectmain.py", line 16, in <module>
import file_1
File "C:UsersUtentePycharmProjectspythonProjectfile_1.py", line 4, in <module>
print(main.func_a())
File "C:UsersUtentePycharmProjectspythonProjectmain.py", line 2, in func_a
return object_a.method()
NameError: name 'object_a' is not defined. 

我想通过启动main.py来创建object_a,并通过从其他文件(将由main.py执行)调用func_a来使用object_a方法

由于__name__ != "__main__",object_a从未在main.py中创建。如果你从if中删除object_a = ClassA(),那么它将运行良好。

这是令人困惑的,因为您期望运行行:object_a = ClassA(),object_a将附加到main模块。

您可以尝试将此添加为main.py的第一行:

print('top of main', __name__)

您将看到这一行执行两次,但结果不同。

要得到你想要的东西,你应该做的就是把main.py中几乎所有的东西都去掉,除了这个:

if __name__ == '__main__':
object_a = ClassA()
print(func_a())
import file_1

加上足够的导入来使这个位有效,再加上:set_object_a(object_a)

因此main.py可以变成:

if __name__ == '__main__':
set_object_a(ClassA())
print(func_a())
import file_1

现在你所拥有的所有东西都需要单独放到另一个模块中,像这样:

# notmain.py
object_a = None
def set_object_a(a):
global object_a
object_a = a
def func_a():
return object_a.method()
class ClassA:
def __init__(self):
pass
def method(self):
return "k"

现在您可以让任何其他模块执行此操作或类似操作:

import notmain
print(notmain.func_a())

相关内容

  • 没有找到相关文章

最新更新