[英]Upading value in dictionary within class in Python
如何更新 class 中字典中的值?
function 'read_messages' 应该打印在__init__
中创建的用户收件箱中的前 N 条消息,并将它们的 'read' 值更改为True
以便下次调用 function 时不会打印它们。
这是我的代码:
class Outlook:
def __init__(self, users):
self.message_id = 0
self.inboxes = {usr: [] for usr in users}
def send_email(self, sender, recipient, title, body):
user_inbox = self.inboxes[recipient]
self.message_id = self.message_id + 1
message_details = {
'id': self.message_id,
'title': title,
'body': body,
'sender': sender,
'read': False
}
user_inbox.append(message_details)
return self.message_id
def read_messages(self, user, N):
user_inbox = self.inboxes[user]
for message in user_inbox[:N]:
if message['read'] == False:
print(message)
message['read'] = True # this does not seem to work
ol1 = Outlook(['James Bond'])
ol1.send_email(
sender='M',
recipient='James Bond',
title='Return to England!',
body='James, return to England immediately',
)
ol1.send_email(
sender='Miss Moneypenny',
recipient='James Bond',
title='Meeting with M',
body='James, M wants to see you tomorrow at 11:00',
)
ol1.read_messages('James Bond',2)
编辑:在第一次调用 'ol1.read_messages' 之后,我希望再次调用它时不会打印任何项目。
这段代码适用于我的朋友。 我认为您的问题是持久性问题之一。 如果您连续调用ol1.read_messages('James Bond',2)
(即编写指令两次),您会看到消息只打印一次。 第二次调用不打印任何项目。 但是,连续运行 python 程序每次都会显示这些消息,因为每次运行程序时,都会再次创建消息。
我稍微修改了您的代码,以便您可以看到它的效果。 在这里,无论它们是否已被阅读,我都让它打印消息。 您可以看到第二次打印消息时, read
属性已设置为false
。 这意味着您正在正确更新字典。
但是,每次运行代码时都会打印 2 条消息,因为每次运行程序时,都是从头开始。 程序结束时,将保存ol1
的memory返回给系统,再次启动程序时,会重新创建ol1
并给它新的消息。
class Outlook:
def __init__(self, users):
self.message_id = 0
self.inboxes = {usr: [] for usr in users}
def send_email(self, sender, recipient, title, body):
user_inbox = self.inboxes[recipient]
self.message_id = self.message_id + 1
message_details = {
'id': self.message_id,
'title': title,
'body': body,
'sender': sender,
'read': False
}
user_inbox.append(message_details)
return self.message_id
def read_messages(self, user, N):
user_inbox = self.inboxes[user]
for message in user_inbox[:N]:
if message['read'] == False:
print(message)
message['read'] = True
else: # This will print read messages
print(message)
ol1 = Outlook(['James Bond'])
ol1.send_email(
sender='M',
recipient='James Bond',
title='Return to England!',
body='James, return to England immediately',
)
ol1.send_email(
sender='Miss Moneypenny',
recipient='James Bond',
title='Meeting with M',
body='James, M wants to see you tomorrow at 11:00',
)
ol1.read_messages('James Bond', 2)
print('\nThis time the "read" attribute is true')
ol1.read_messages('James Bond', 2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.