存储在列表中的Python类实例,用于存储单独的实例

时间:2013-04-25 15:16:49

标签: python class variables global

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实例的信息。不是一个实例,而是SEVERAL单独的信息实例,列表是可访问的列表,我可以在其中编辑它,它可以保存来自不同实例的信息。它没有这样做。它在每个实例后重置。

我尝试了全局变量路线,但没有理解它,也不认为它会起作用。我在类中设置了一个全局变量OUTSIDE,并在类中创建了一个对象以存储在列表中,但它给出了一个错误: UnboundLocalError:在赋值之前引用的局部变量'message_count'

我正在开发一个需要在交互式python网站中使用类的练习:http://openbookproject.net/thinkcs/python/english3e/classes_and_objects_I.html#term-class

请帮助我。

2 个答案:

答案 0 :(得分: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")

工作得很好

答案 1 :(得分: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类的所有实例共享。