2013-04-25 141 views
1
from datetime import datetime 

class sms_store: 
    def __init__(self): 
     self.store = [] #Keeps resetting/not saving data from previous instances 
     self.message_count = 0 #Keeps resetting/not saving data from previous instances 
    def add_new_arrival(self,number,time,text): 
     self.store.append(("From: "+number, "Recieved: "+time,"Msg: "+text)) 
     self.message_count += 1 

newsms = sms_store() 
time = datetime.now().strftime('%H:%M:%S') 
newsms.add_new_arrival("23456",time, "hello, how are you?") 

如上面的評論部分所示,我想要一個列表來存儲來自VARIOUS實例的信息。不是一個實例,而是幾個單獨的信息實例,該列表是一個可訪問的列表,我可以在其中編輯它,並從不同的實例中保存信息。它沒有這樣做。它在每個實例後重置。存儲在列表中以存儲單獨實例的Python類實例

我已經嘗試了全局變量路由,但沒有理解它,不認爲它會工作。我在類的外面設置了一個全局變量,並在類中創建了一個對象以存儲在列表中,但它給了我一個錯誤:UnboundLocalError:在作業之前引用的局部變量'message_count'。

我的工作,需要一個在交互式Python網站使用類的鍛鍊; Tibial:http://openbookproject.net/thinkcs/python/english3e/classes_and_objects_I.html#term-class

請請幫助我。

+0

,您應該只創建一個* *'store'變量,然後再用這一點。這是我在你對另一個問題的回答中告訴你的。您正在爲每條短信創建一個*新*商店。不要這樣做! – 2013-04-25 15:19:08

+0

作爲一個全局變量,它應該被聲明爲'global message_count'。 – Elazar 2013-04-25 15:19:44

+3

@Elazar:不,我們只是讓OP遠離那個。這不是一個好的做法。 – 2013-04-25 15:20:09

回答

0

它看起來像你想要一個類變量。

的代碼應該是這樣的:

from datetime import datetime 

class Sms_store: 
    store = [] 
    message_count = 0 

    def __init__(self): 
     pass 

    def add_new_arrival(self,number,time,text): 
     Sms_store.store.append(("From: "+number, "Recieved: "+time,"Msg: "+text)) 
     Sms_store.message_count += 1 

newsms1 = Sms_store() 
time = datetime.now().strftime('%H:%M:%S') 
newsms1.add_new_arrival("23456",time, "hello, how are you?") 

newsms2 = Sms_store() 
time = datetime.now().strftime('%H:%M:%S') 
newsms2.add_new_arrival("23456",time, "hello, how are you?") 

print Sms_store.store 

這樣,變量storemessage_count將由Sms_store類的所有實例共享。

+0

然後你的班級沒有*點*。這裏沒有實例狀態,爲什麼要使用一個類呢?我在OP問的另一個問題中已經提到了這一點。 – 2013-04-25 15:26:21

+1

同意...但爲了學習的目的,它可能是有用的。 – 2013-04-25 15:26:51

+0

可以使用函數(使模塊成爲API和單例),也可以使用全局持有一個類實例。擁有隻有類變量的類只會造成混淆。 – 2013-04-25 15:28:22

1

你不應該創建的sms_store每次一個新實例:

newsms = sms_store() 
newsms.add_new_arrival("23456", datetime.now().strftime('%H:%M:%S'), "hello, how are you?") 
newsms.add_new_arrival("65432", datetime.now().strftime('%H:%M:%S'), "I'm fine, thanks") 

作品就好