2014-12-04 73 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