2015-05-25 67 views
0

我想將對象添加到列表中,該對象包含標題和藝術家。 對象添加正常,但是當我想從列表中打印所有對象時出現錯誤。如下所示執行我的方法時,它只打印兩次添加的最近對象。添加到列表後,只能打印最近的對象

listOfBooks = [] 

class Book: 
    title = "No Title" 
    author = "No Author" 


    def myBook(self, title, author): 
     self.title = title 
     self.author = author 

    def get(self): 
     return self.title + self.author 



book = Book() 
for _ in range(0,2): 
    titleInput = input("Enter a title: ") 
    authorInput = input("Enter an author: ") 
    book.myBook(titleInput, authorInput) 
    listOfBooks.append(book) 



for i in range(0,len(listOfBooks)): 
    print(listOfBooks[i].get()) 
+0

什麼錯誤?請向我們展示回溯。 –

+0

因爲book = Book()應該在裏面,而不是在for循環之外。在這種情況下,您覆蓋同一個對象 – therealprashant

回答

4

您需要在每個循環迭代中創建一個新的Book實例。移動book = Book()內循環:

for _ in range(0,2): 
    book = Book() # Here 
    titleInput = input("Enter a title: ") 
    authorInput = input("Enter an author: ") 
    book.myBook(titleInput, authorInput) 
    listOfBooks.append(book) 
1

OK,所以你必須是具體到每一個人Book對象一些實例變量(標題和作者)。設置這些在創建您的實例的典型方法是在對象的__init__()方法,以請求他們,所以你的代碼應該是這樣的:

listOfBooks = [] 


class Book: 
    title = "No Title" 
    author = "No Author" 

    def __init__(self, title, author): 
     self.title = title 
     self.author = author 

    def get(self): 
     return self.title + self.author 

for _ in range(0,2): 
    titleInput = input("Enter a title: ") 
    authorInput = input("Enter an author: ") 
    # Calling the class calls the __init__ method and creates the 
    # instance 
    book = Book(titleInput, authorInput) 
    listOfBooks.append(book) 

for i in range(0,len(listOfBooks)): 
    print(listOfBooks[i].get()) 

這給了相同的結果,俞灝的回答是:

​​
1
  1. boot initial(book = Book())不在for循環中,因此,實際上,每個循環都編輯相同的Book實例,您可以使用id()來查看。

  2. 對於列表,元素可以是相同的,所以對於您的for循環,相同的對象書被添加到listOfBooks中兩次,這就是爲什麼打印兩次相同的輸出。

相關問題