Это учебная задача, не реальное приложение, но хочется думать шире и понимать как всё-таки должно быть правильно в реальном приложении. Прошу с этим помочь.
Допустим есть мессенджер, есть два класса - для сообщений( каждое сообщение это объект класса) и для обработки сообщений.
Где, как и почему должны храниться сообщения? Или в данном случае это очень упрощённый вариант и хранение должно быть только в базе данных на сервере? Но, допустим, может же быть какой-то кэш для локального хранения на стороне клиента...как это должно быть реализовано?
Код:
import time
class Messenger:
def __init__(self):
self.msg_list = {} #хранения сообщений, {timestamp: Message()}
def add_message(self, msg):
self.msg_list[msg.msg_timestamp] = msg
def remove_message(self, msg):
self.msg_list.pop(msg.msg_timestamp)
def set_like(self, msg):
obj = self.msg_list[msg.msg_timestamp]
if obj:
obj.fl_like = True
else:
raise ValueError('This message does not exist')
def set_dislike(self, msg):
obj = self.msg_list[msg.msg_timestamp]
if obj:
obj.fl_like = False
else:
raise ValueError('This message does not exist')
def show_last_message(self, num):
print(list(list(self.msg_list.values())[-num:]))
def total_messages(self):
print(len(self.msg_list))
# объект сообщения
class Message:
def __init__(self, text):
self.text = text
self.fl_like = False
self.msg_timestamp = time.time()
#пример использования
message = Message("Всем привет!")
tg = Messenger()
tg.add_message(message)
tg.add_message(Message("Как дела?"))
tg.set_like(message)
tg.remove_message(message)
Вариант кода 2(сократил). Самый не понятный для меня вариант - хранить в самом классе, предполагается, что это и есть верный вариант, но это как то странно - хранить внутри класса, а не в объекте класса какие-то данные...
class Messenger:
msg_list = {} #????
@classmethod
def add_message(cls, msg):
cls.msg_list[msg.msg_timestamp] = msg
#здесь был остальной код
#пример использования
message = Message("Всем привет!")
Messenger.add_message(message)