2014-12-04 89 views
1

我对Python非常陌生,我无法找到一种方法来获得在不同python文件间共享的静态变量......在Java中,似乎很直接所以...这里是我想要做的事:在文件中共享的Python中的静态变量

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,其内容可以暂时被忽略......

所以我们说user1.pyuser2.py被在大约相同的时间运行,说时间= 0

  • 在时间= 1,有一个消息到达(与message.event = “添加” 和message.data = “001”),在 数据回调功能。PY被触发并且“001”被加到变量list_vars

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

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

    • list_vars = [ “001”]
    • VAR = 002

这怎么能在Python中实现?

非常感谢!

回答

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 
    
+0

嗨塞尔贝勒斯特,谢谢你的回答,那我解决了在本例中所描述的问题。其实我曾经给可能无法准确地描述我所面临的问题的例子,所以请原谅我,如果你有时间,你能不能也来看看在这个问题底部的更新?非常感谢! – Fujiolydak 2014-12-04 09:32:21

+0

@Fujiolydak:所提供的所有脚本都在同一个进程中运行,他们会正确地共享数据。如果线程不同,唯一的问题是您可能需要将访问同步到共享数据。 – 2014-12-04 10:11:55