在Python中创建列表对象类

在Python中创建列表对象类,python,list,class,append,Python,List,Class,Append,这是一个基本问题。我正在尝试以下代码: class SMS_store: def __init__(self): self=[] #probably something is wrong here def add_new_arrival(self,from_number,time_arrived,text_of_SMS): self.append([False,from_number,time_arrived,text_of_SMS]) #append list

这是一个基本问题。我正在尝试以下代码:

class SMS_store:

def __init__(self):
    self=[]    #probably something is wrong here

def add_new_arrival(self,from_number,time_arrived,text_of_SMS):
    self.append([False,from_number,time_arrived,text_of_SMS])    #append list to self list
    self[len(self)-1]=tuple(self[len(self)-1])

def message_count(self):
    return len(self)

my_inbox=SMS_store()
my_inbox.add_new_arrival('01234','9:37 AM','How are you?')
但我得到了以下错误:

>>> 
Traceback (most recent call last):
  File "C:\Users\Arnob\Desktop\New Text Document.py", line 15, in <module>
    my_inbox.add_new_arrival('01234','9:37 AM','How are you?')
  File "C:\Users\Arnob\Desktop\New Text Document.py", line 8, in add_new_arrival
    self.append([False,from_number,time_arrived,text_of_SMS])    #append list to self list
AttributeError: 'SMS_store' object has no attribute 'append'
>>>
>
回溯(最近一次呼叫最后一次):
文件“C:\Users\Arnob\Desktop\New Text Document.py”,第15行,在
我的收件箱。添加新到达(“01234”,“上午9:37”,“你好吗?”)
文件“C:\Users\Arnob\Desktop\New Text Document.py”,第8行,在add\u New\u中
self.append([False,from_number,time_,text_of_SMS])#将列表附加到self列表
AttributeError:'SMS_store'对象没有属性'append'
>>>

我的代码有什么问题?

您仍然需要创建一个普通变量名,只需将
self.
作为前缀:

self.mylist = []
要访问它,请执行以下操作:

self.mylist.append(n)
或:


实际上,您正在覆盖
self
。您不想这样做。

如果要从
列表继承,请使用以下命令:

class SMS_store(list):
               ^^^^^^
并从
\uuuu init\uuuu
方法中删除对
self
的赋值

也就是说,您可能只希望有一个包含列表的命名属性:

class SMS_store(object):

   def __init__(self):
      self.messages = []

   def add_new_arrival(self, from_number, time_arrived, text_of_SMS):
      self.messages.append((False,from_number,time_arrived,text_of_SMS))

   def message_count(self):
      return len(self.messages)

my_inbox = SMS_store()
my_inbox.add_new_arrival('01234','9:37 AM','How are you?')
就表示实际消息而言,这听起来像是一个很好的用例。它就像一个元组,但允许按名称访问字段。下面是一个快速说明:

import collections

SMS = collections.namedtuple('SMS', 'from_number time_arrived text_of_SMS')

sms = SMS(from_number='01234', time_arrived='9:37 AM', text_of_SMS='How are you?')
print sms.text_of_SMS

您可以像这样子类化
list

class SMS_store(list):

    def add_new_arrival(self, from_number, time_arrived, text_of_SMS):
        self.append((False, from_number, time_arrived, text_of_SMS))    #append tuple to self

    def message_count(self):
        return len(self)
请注意,除非您希望在那里做一些额外的事情,否则不需要
\uuuuu init\uuuu


您不需要附加列表,然后将其转换为元组,您可以直接使用
()
而不是
[]

创建元组,谢谢!我知道了,谢谢你!我知道了,谢谢你!我已经弄明白了。你最后的回答也帮助了我。
class SMS_store(list):

    def add_new_arrival(self, from_number, time_arrived, text_of_SMS):
        self.append((False, from_number, time_arrived, text_of_SMS))    #append tuple to self

    def message_count(self):
        return len(self)