在我的项目中,我想有一个全局的"Filemanager",这样我总是访问最新的信息。我写了一个很好的简短的例子来解释我的问题,因为我不想把我的整个代码粘贴在这里。
main.py
class GlobalList:
def __init__(self):
self.pool = []
def add(self, toadd):
self.pool.append(toadd)
global list
list = GlobalList()
list.add("Test from main")
from other_file import add_sth
add_sth()
list.add("Hello again from main.py")
other_file.py
def addme():
global list
list.add("Hello from other_file.py")
这不起作用,因为addme函数不能访问全局的"列表";变量。
我也试过"import "来自主模块的列表,使用
from main import list
def addme():
list.add("Hello from other_file.py")
毫无疑问,这不起作用,因为它抛出了一个循环导入错误。
我真的不想通过"list"对象到每个需要它的函数,因为这样每个函数都会有很多参数。
通过将GlobalList放在与main.py不同的文件中,可以很容易地破坏递归导入。
global_list.py
class GlobalList:
def __init__(self):
self.pool = []
def add(self, toadd):
self.pool.append(toadd)
glist = GlobalList()
other_file.py
from global_list import glist
def add_sth():
glist.add("Hello from other_file.py")
main.py
from global_list import glist
glist.add("Test from main")
from other_file import add_sth
add_sth()
glist.add("Hello again from main.py")
print(glist.pool)
它输出['Test from main', 'Hello from other_file.py', 'Hello again from main.py']
['Test from main', 'Hello from other_file.py', 'Hello again from main.py']
虽然我希望您传递GlobalList
,但要解决您的确切问题,您应该输入以下代码:
class GlobalList:
def __init__(self):
self.pool = []
def add(self, toadd):
self.pool.append(toadd)
global_list = GlobalList()
例如,将转换为Global.py
那么所有你的其他文件应该以:
开头from Global import global_list
,并像这样访问它:global_list.add("Test from main")