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

3
我是一个有用的助手,可以为您翻译文本。
我刚开始学习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.pyuser2.py,暂时可以忽略它们的内容...
假设在时间=0时,user1.pyuser2.py同时运行。
- 在时间=1时,消息到达(消息事件为“add”,消息数据为“001”),触发data.py中的回调函数,将“001”添加到变量list_vars中。 - 在时间=2时,user1.py更新data.py中的变量var“002”。 - 在时间=3时,如果user2.py想要访问并打印出最新值的变量list_varsvar: - list_vars = ["001"] - var = 002
如何在Python中实现这一点?
非常感谢!
1个回答

5
问题在于(我猜想)您正在单独启动user1.pyuser2.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
    

嗨,Serge Ballesta,感谢您的回答,这解决了我所描述的问题。实际上,我给出的示例可能并不能准确地描述我所面临的问题,所以请原谅我,如果您有时间,也能否看一下问题底部的更新?万分感谢! - Fujiolydak
@Fujiolydak:只要所有脚本在同一进程中运行,它们就可以正确共享数据。唯一的问题是如果有不同的线程,你可能需要同步访问共享数据。 - Serge Ballesta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接