2016-12-02 324 views
1

我正在用Python編寫一個類,用於跟蹤各種書籍。有三個實例變量:author,titlebook_id。有四種方法:用Python編寫書籍類

  1. __init__(self, author, title, book_id):(構造函數,實例化所有實例變量。)
  2. __str__(self):返回字符串表示這種格式 Book("Homer", "The Odyssey", 12345)
  3. __repr__(self):返回相同的字符串表示__str__
  4. __eq__(self, other)通過檢查所有三個實例變量是否相同來確定書本身是否與另一本書相同。返回bool

我已經到了路障。這是我迄今獲得的良好開局的代碼。出於某種原因,我不斷收到__repr__方法返回的縮進錯誤。如果熟悉寫作課的人有任何建議,我會很感激。

class Book: 
    def __init__(self, author, title, book_id): 
     self.author = author 
     self.title = title 
     self.book_id = book_id 

    def __str__(self): 
     return 'Book(author, title, book_id)' 

    def __repr__(self): 

     return 'Book(author, title, book_id)' 

    def __eq__(self, other): 

    #Not sure if this is the right approach 

     for title in Book: 
      for title in Book: 
       if title == title: 
        if author == author: 
         if book_id == book_id: 
          return True 
+3

您已經混合了製表符和空格以進行縮進。別那樣做。 (你的'__eq__'也是完全錯誤的,但是製表符和空格是導致你所問的問題的原因。) – user2357112

+0

另外,你的'__str__'是多餘的,你的'__str__'和__repr__'都返回文字字符串「Book(author,title,book_id)」'而不是替換你想要的屬性值。 – user2357112

+0

一本書不可迭代。 Book'中的標題是不正確的。你需要引用'self.title ==其他.title和self.author == other.author',例如 –

回答

2

首先,您沒有很好地執行方法__eq__。其次,你不是,返回你書中的數據,但只是一個字符串'Book(author, title, book_id)'。我希望這能解決你的問題。

class Book: 
    def __init__(self, author, title, book_id): 
     self.author = author 
     self.title = title 
     self.book_id = book_id 

    def __str__(self): 
     return 'Book({}, {}, {})'.format(self.author, self.title, self.book_id) 

    def __repr__(self): 

     return 'Book({}, {}, {})'.format(self.author, self.title, self.book_id) 

    def __eq__(self, other): 
     return self.title == other.title and self.author == other.author and self.book_id == other.book_id 
+0

@ n00bprogrammer22,這是否解決您的問題? – lmiguelvargasf

+0

@Imiguelvargasf是的,謝謝這個完美的作品我會選擇這個作爲最佳答案 – n00bprogrammer22

+1

如果'__repr__'和'__str__'是相同的,那麼沒有理由定義兩者。只需'__repr__'就足夠了。 – SethMMorton