全局共享变量



在我的项目中,我想有一个全局的"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']

虽然我希望您传递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")

相关内容

  • 没有找到相关文章

最新更新