Python中跨文件共享的静态变量

Python中跨文件共享的静态变量,python,static,singleton,Python,Static,Singleton,我对Python非常陌生,我找不到一种在不同Python文件之间共享静态变量的方法。。。在Java中,这样做似乎很简单。。。以下是我想做的: data.py user1.py user2.py 对不起,这可能不是最好的例子,但它抓住了这个想法。。。我的问题是,如果我想: list_vars = ['001'] var = 002 在运行user1.py和user2.py之后的某个/甚至其他python文件或类中(我认为user1.py和user2.py是同一软件包中通常同时运行的两个子程序),

我对Python非常陌生,我找不到一种在不同Python文件之间共享静态变量的方法。。。在Java中,这样做似乎很简单。。。以下是我想做的:

data.py

user1.py

user2.py

对不起,这可能不是最好的例子,但它抓住了这个想法。。。我的问题是,如果我想:

list_vars = ['001']
var = 002
在运行user1.py和user2.py之后的某个/甚至其他python文件或类中(我认为user1.py和user2.py是同一软件包中通常同时运行的两个子程序),什么是“python方式”呢

非常感谢

========================================

问题更新:

为了更具体地说明问题,请允许我用以下方式描述问题:

data.py

有两个额外的文件,user1.pyuser2.py,它们的内容暂时可以忽略

因此,假设user1.pyuser2.py几乎同时运行,假设时间=0

  • 时间=1时,有一条消息传入(带有message.event=“add” 和message.data=“001”),中的回调函数 data.py被触发,并且“001”被添加到变量列表中

  • 在时间=2时,user1.py更新中的变量var data.py“002”

  • 在时间=3时,如果user2.py想要访问并打印 变量列出变量变量,以及最新的值:

    • 列表变量=[“001”]
    • var=002
如何在Python中实现这一点

多谢各位

问题是(我想)您分别启动了
user1.py
user2.py
。因此,类
Shared
的静态值不会在不同的调用中保留

但这是一种完全正确的数据共享方式:在一个文件中声明类,甚至在其他文件中导入变量

但是Python不是Java,并且不需要所有东西都是类。你可以做:

  • data.py

    list_vars=[]
    var=“”
    def print_vars():
    打印“列表变量=”+str(共享的列表变量)
    打印“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
    

你好,Serge Ballesta,谢谢你的回答,这解决了我在示例中描述的问题。事实上,我给出的例子可能无法准确描述我所面临的问题,因此,请原谅,如果你有时间,你还可以看看问题底部的更新吗?非常感谢@Fujiolydak:如果所有脚本都在同一进程中运行,它们将正确地共享数据。如果存在不同的线程,唯一的问题是您可能需要同步对共享数据的访问。
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)
import time
import data as shared

shared.list_vars.append("001")
time.sleep(5.0)
shared.print_vars()

# It prints:
# list_vars = ['001']
# var =
import time
import data as shared

shared.var = "002"
time.sleep(5.0)
shared.print_vars()

# It prints:
# list_vars = []
# var = 002
import user1
# It prints:
# list_vars = ['001']
# var =
import user2
# It prints:
# list_vars = ['001']
# var = 002