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

时间:2014-12-04 08:15:14

标签: python static singleton

我是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 ,包含最新值:

    • list_vars = [" 001"]
    • var = 002

如何在Python中实现这一目标?

非常感谢!

1 个答案:

答案 0 :(得分:4)

问题在于(我猜)您将单独启动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