I have spent couple of days to get somewhere in this.
Here is the code:
class Message:
def __init__(self, sender, recipient, text):
self.sender = sender
self.recipient = recipient
self.text = text
class User:
def __init__(self, username):
self.username = username
def edit_message(self, message, new_text):
if message.sender == self.username:
message.text = new_text
class Admin(User):
def edit_message(self, message, new_text):
message.text = new_text
test_text = 'This is test message!' #define text for first message
test_text_002 = 'This is second test message!' #define text for second message
edited_text = 'This is edited text' #define text for edited message
user_001 = User('[email protected]') #define sender
user_002 = User('[email protected]') #define recipient
admin = Admin('admin') #define admin
first_message = Message(user_001,user_002,test_text) #create first message
second_message = Message('[email protected]','[email protected]',test_text_002) #create second message
Question #1:
Which is the right format for message in case of original code? first_message or second_message? Or third option? If there is no third option please proceed to question #2.
Question #2:
Is the original code even suppose to work?
If so, I kindly ask to provide code where author can edit his message.
Deep breath…
As in case of first_message, method of .edit_message will never be used, because to edit you have to take User class object (user_001), use .edit_message method, with parameters in parentheses first_message (Message class) and edited_text (string) :
user_001.edit_message(first_message,edited_text)
As an outcome we get never True objective to fulfill:
if message.sender == self.username
Because:
message.sender is object type (unless you change to message.sender.username)
self.username is username of the user that tries to edit message
Deep breath…
In case of second_message there is a Message class object, that uses self.sender and self.recipient as strings. So as it was mentioned in many answers “you cant use any method (like .edit_message) on a string”. And Message class object has no .edit_message method. So there is no way to edit the message.
You can’t use this:
'[email protected]'.edit_message(second_message,edited_text)
Because string has no class.
To edit you have to define new user that will use User class
user_003 = User('[email protected]')
Then you can edit the message with
user_003.edit_message(second_message,edited_text)
Doing this by hand doesn’t make much sense, so there must be some method implemented inside Message class, to create usernames (User class) from strings. Which from other hand, also don’t make much sense, because we still bump into problem of the first_message:
if message.sender == self.username
Or sense is circular 
Deep breath…
So anyway…
In both cases of messages the only user that can edit a message is user that is from Admin class. Or am I missing something…