我对Python很陌生,我找不到在不同python文件之间共享静态变量的方法...在Java中,这样做似乎很简单...这就是我要尝试的方法做:
data.py
class Shared(object):
list_vars = []
var = ""
@staticmethod
def print_vars():
print "list_vars = " + str(Shared.list_vars)
print "var = " + Shared.var
user1.py
import time
from data import Shared
Shared.list_vars.append("001")
time.sleep(5.0)
Shared.print_vars()
# It prints:
# list_vars = ['001']
# var =
user2.py
import time
from data import Shared
Shared.var = "002"
time.sleep(5.0)
Shared.print_vars()
# It prints:
# list_vars = []
# var = 002
抱歉,这可能不是最好的例子,但是它抓住了主意……我的问题是,如果我想拥有:
list_vars = ['001']
var = 002
在同时运行user1.py和user2.py之后(甚至是其他一些python文件或类中)(我将user1.py和user2.py视为同一软件包中的两个子程序,通常在同时),这样做的“ Python方式”是什么?
非常感谢!
==============================
问题的更新:
为了更具体地说明问题,请允许我以这种方式描述问题:
data.py
class Shared(object):
list_vars = []
var = ""
@staticmethod
def print_vars():
print "list_vars = " + str(Shared.list_vars)
print "var = " + Shared.var
# Can be considered as a separate thread running in the background, waiting for messages
@staticmethod
def callback(message):
if message.event == "add":
Shared.list_vars.append(message.data)
elif message.event == "remove" and message.data in Shared.list_vars:
Shared.list_vars.remove(message.data)
有两个额外的文件,user1.py和user2.py,它们的内容暂时可以忽略...
因此,假设user1.py和user2.py大约在同一时间运行,例如time = 0。
在时间= 1时,出现一条消息(带有message.event =“ add”
和message.data =“ 001”),则在
触发data.py,并将“ 001”添加到变量list_vars。
在时间= 2时,user1.py更新变量var in
data.py改为“ 002”。
在时间= 3时,如果user2.py要访问并打印出
变量list_vars和var,具有最新值:
list_vars = [“ 001”]
变量= 002
如何在Python中实现?
非常感谢你!
python大神给出的解决方案
问题是(我想)您正在分别启动user1.py
和user2.py
。因此,类Shared
的静态值不会在不同的调用之间保留。
但这是共享数据的一种完全正确的方式:您可以在一个文件中声明类,甚至在另一个文件中导入变量。
但是Python不是Java,并且所有内容都不必是一个类。你可以做:
data.py
list_vars = []
var = ""
def print_vars():
print "list_vars = " + str(Shared.list_vars)
print "var = " + Shared.var
user1.py
import time
import data as shared
shared.list_vars.append("001")
time.sleep(5.0)
shared.print_vars()
# It prints:
# list_vars = ['001']
# var =
user2.py
import time
import data as shared
shared.var = "002"
time.sleep(5.0)
shared.print_vars()
# It prints:
# list_vars = []
# var = 002
main.py
import user1
# It prints:
# list_vars = ['001']
# var =
import user2
# It prints:
# list_vars = ['001']
# var = 002