我是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 正在大约运行同时,说时间= 0。
在时间= 1时,会收到一条消息(使用message.event =" add" 和message.data =" 001"), 回调 功能 触发 data.py ,并将 " 001" 添加到变量 list_vars
在时间= 2时, user1.py 更新变量 var data.py 指向 " 002" 。
在时间= 3时,如果 user2.py 想要访问并打印出来 变量 list_vars 和 var ,包含最新值:
如何在Python中实现这一目标?
非常感谢!
答案 0 :(得分:4)
问题在于(我猜)您将单独启动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