【问题标题】:Create List Object Class in Python在 Python 中创建列表对象类
【发布时间】:2013-07-01 23:02:36
【问题描述】:

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

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'
>>>

我的代码有什么问题?

【问题讨论】:

    标签: python list class append


    【解决方案1】:

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

    self.mylist = []
    

    要访问它,您可以执行以下操作:

    self.mylist.append(n)
    

    或者:

    self.mylist[3] = 'hi'
    

    你实际上覆盖了self。你不想那样做。

    【讨论】:

    • 谢谢!我想通了。
    【解决方案2】:

    如果您想从list 继承,请使用以下命令:

    class SMS_store(list):
                   ^^^^^^
    

    并从__init__ 方法中删除对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?')
    

    就表示实际消息而言,这听起来像是namedtuple 的一个很好的用例。它就像一个元组,但允许按名称访问字段。这是一个简单的说明:

    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
    

    【讨论】:

    • 谢谢!我想通了。
    【解决方案3】:

    你可以像这样子类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)
    

    请注意,不需要__init__,除非您希望在那里做一些额外的事情。

    你不需要附加一个列表然后把它变成一个元组,你可以直接用()而不是[]创建元组

    【讨论】:

    • 谢谢!我已经想通了。您的上一个回答也对我有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2011-01-18
    • 2022-11-05
    • 1970-01-01
    相关资源
    最近更新 更多