这里的SMS_Store
继承了Message
,但是每次调用父方法时都会出现错误:
NoneType object does not have attribute 'read_message'
。你知道吗
而且存储在列表中的对象也返回一个None
值??你知道吗
class Message():
def __init__(self, from_number, time_arrived, text_of_sms):
self.has_been_viewed=False
self.from_number= from_number
self.time_arrived = time_arrived
self.text_of_sms = text_of_sms
def getTime(self):
return self.time_arrived
def getText(self):
return self.text_of_sms
def setView(self):
self.has_been_viewed = True
def check_read(self):
return self.has_been_viewed
class SMS_Store(Message):
def __init__(self):
self.list_=[]
def add_new_arrivals(self,from_number, time_arrived, text_of_sms):
self.list_.append(Message.__init__(self,from_number,time_arrived,text_of_sms))
def message_count(self):
return len(self.list_)
def get_unread_index(self):
unread =[]
for i in range(len(self.list_)):
if(super(SMS_Store,self).check_read() == False):
unread.append(i)
return unread
def read_message(self,index):
self.list_[index].getText()
def delete(self,ints):
a = int(ints)
self.list_.pop(a)
def clear():
for i in list:
self.list_.pop(i)
inbox = SMS_Store()
inbox.add_new_arrivals(12,9,'some nights i stay up')
inbox.add_new_arrivals(12,5,'cashing in my bad luck')
inbox.add_new_arrivals(14,7,'somenights i call it a draw')
inbox.add_new_arrivals(56,0,'somenights i wish that my lips could built a castle.')
inbox.read_message(0)
在这种情况下不应该使用继承。下面是更正的版本(也是固定的代码样式):
不清楚错误可能来自何处,因为
read_message()
仅由代码末尾的inbox.read_message(0)
语句调用,而该语句不会产生错误(尽管read_message()
方法的返回值始终是None
,因为其中没有显式的return
语句)。你知道吗不管怎样,为了回答这个名义上的问题,为了明确地做到这一点,您将使用^{} 方法,但这不是这里的问题,即
SMS_Store
类根本不应该是Message
的子类,因为它不是Message
类的专门化…而是Message
实例的容器。你知道吗下面是代码的修改版本,它展示了如何将这两个类分开,并使大多数方法(如果不是所有方法)都能工作。它现在也主要遵循PEP 8 - Style Guide for Python Code建议。你知道吗
相关问题 更多 >
编程相关推荐