在 Python 中创建列表对象类
Posted
技术标签:
【中文标题】在 Python 中创建列表对象类【英文标题】:Create List Object Class in 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'
>>>
我的代码有什么问题?
【问题讨论】:
【参考方案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__
,除非您希望在那里做一些额外的事情。
你不需要附加一个列表然后把它变成一个元组,你可以直接用()
而不是[]
创建元组
【讨论】:
谢谢!我已经想通了。您的上一个回答也对我有所帮助。以上是关于在 Python 中创建列表对象类的主要内容,如果未能解决你的问题,请参考以下文章
在 Android Studio 中创建一个包含多个对象的列表视图