2013-04-25 80 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") 

作品就好