Hello Stack Overflow!
I am executing a simple command in a program that compiles a report of all the books contained in a library. The library contains a list of shelves, each shelves contains a dictionary of books. However, despite my best efforts, I am always duplicating all my books and placing them on every shelf, instead of the shelf I've instructed the program to place the book on.
I expect I have missed out on some kind of fundamental rule with object creation and organization.
I believe the culprits are the enshelf and unshelf methods in the book class.
Thank you so much for your time, Jake
Code below:
class book():   
    shelf_number = None
    def __init__(self, title, author):
        super(book, self).__init__()
        self.title = title
        self.author = author
    def enshelf(self, shelf_number):
        self.shelf_number = shelf_number
        SPL.shelves[self.shelf_number].books[hash(self)] = self
    def unshelf(self):  
        del SPL.shelves[self.shelf_number].books[hash(self)]
        return self
    def get_title(self):
        return self.title
    def get_author(self):
        return self.author
class shelf():
    books = {}
    def __init__(self):
        super(shelf, self).__init__()
    def get_books(self):
        temp_list = []
        for k in self.books.keys():
            temp_list.append(self.books[k].get_title())
        return temp_list
class library():
    shelves = []
    def __init__(self, name):
        super(library, self).__init__()
        self.name = name
    def make_shelf(self):
        temp = shelf()
        self.shelves.append(temp)
    def remove_shelf(shelf_number):
        del shelves[shelf_number]
    def report_all_books(self):
        temp_list = []
        for x in range(0,len(self.shelves)):
            temp_list.append(self.shelves[x].get_books())
        print(temp_list)
#---------------------------------------------------------------------------------------
#----------------------SEATTLE PUBLIC LIBARARY -----------------------------------------
#---------------------------------------------------------------------------------------
SPL = library("Seattle Public Library")                     
for x in range(0,3):
    SPL.make_shelf()
b1 = book("matterhorn","karl marlantes")
b2 = book("my life","bill clinton")
b3 = book("decision points","george bush")
b1.enshelf(0)
b2.enshelf(1)
b3.enshelf(2)
print(SPL.report_all_books())
b1.unshelf()
b2.unshelf()
b3.unshelf()
OUTPUT:
[['decision points', 'my life', 'matterhorn'], ['decision points', 'my life', 'matterhorn'], ['decision points', 'my life', 'matterhorn']] None [Finished in 0.1s]
..instead of [["decision points"],["my life"],["matterhorn"]]
 
     
    