我有这两个文件:
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())