Ваш код
def __str__(self):
return ("Author:"+self.author,"Title:"+self.title)
действительно возвращает 2 кортежа:
def __str__(self):
return (
"Author:"+self.author,
"Title:"+self.title,
)
Если вы используете Python 3.6+, вы ищете
def __str__(self):
return f"Author: {self.author}, Title: {self.title}"
или для совместимости со всеми версиями
def __str__(self):
return f"Author: %s, Title: %s" % (self.author, self.title)