This is a fairly simple code that adds books and their info to the list. Yet I recieve unexpected output.
class Book:
def __init__(self, name, author, code):
self.name = name
self.author = author
self.code = code
self.available = True
class Library:
def __init__(self):
self.books = []
def addBook(self, book):
self.books.append(book)
algebra = Book('Algebra for beginners', 'Albert Einstein', 123)
lib = Library()
lib.addBook(algebra)
print(lib.books)
CodePudding user response:
Because the type is Book followed by its identifier. If you want something human readable use __repr__
(str representation)
Try
class Book:
def __init__(self, name, author, code):
self.name = name
self.author = author
self.code = code
self.available = True
def __repr__(self):
return f"<{self.__class__.__name__} ({self.name} by {self.author})>"
class Library:
def __init__(self):
self.books = []
def addBook(self, book):
self.books.append(book)
algebra = Book('Algebra for beginners', 'Albert Einstein', 123)
lib = Library()
lib.addBook(algebra)
print(lib.books)
CodePudding user response:
there are two ways to go here:
Method 1 - asForceBru suggests in the comment, add a __repr__
method to the Book
class, which returns a string:
class Book:
def __init__(self, name, author, code):
self.name = name
self.author = author
self.code = code
self.available = True
def __repr__(self):
return self.name ", " self.author ", code: " \
str(self.code) ", available: " str(self.available)
so that the output of print(lib.books)
is:
[Algebra for beginners, Albert Einstein, code: 123, available: True]
OR
Method 2 - add a __str__
method to both Book
and Library
classes:
class Book:
def __init__(self, name, author, code):
self.name = name
self.author = author
self.code = code
self.available = True
def __str__(self):
return self.name ", " self.author ", code: " \
str(self.code) ", available: " str(self.available)
class Library:
def __init__(self):
self.books = []
def __str__(self):
info_string = ""
for b in self.books:
info_string = str(b) "\n"
return info_string
def addBook(self, book):
self.books.append(book)
so that now the output of print(lib)
is:
Algebra for beginners, Albert Einstein, code: 123, available: True
As you see, the call to print()
and output is slightly different.