将对象添加到列表 Python OOP

Adding an object to a list Python OOP

我是 python OOP 的新手。我正在尝试创建一种获取用户输入(书名、作者和流派)的方法,创建一本书对象并仅在这样一本书不存在时才将其添加到列表中。最初,我想使用 __eq__ 但找不到让它工作的方法...

这是我的代码:

class Book:
def __init__(self, book_name, author_name, genre):
    self.book_name = book_name
    self.author_name = author_name
    self.genre = genre
    self.booksList=[]

def __eq__(self, other):
    if (self.book_name == other.book_name):
        return True
    else: 
        return False
    
def __str__(self):
    return f"The book {self.book_name} written by {self.author_name} is {self.genre}"

def addBook(self, book_name, author_name, genre):
    if book_name not in self.booksList:
      self.booksList.append(book_name)
      print("success")
    else:
        print("Book already exists")
while True:
    option=input("choose an operation:\n \n") 
    
    if option not in ['1','2','3','4','5','6','7','8']:
            print("Please enter a valid operation")

    if (option=="1"):
                  book_name=input ('Enter book name:')
                  author_name = input ('Enter author name:')
                  genre= input ('Enter genre:')
                  new_book=Book(book_name, author_name, genre)
                  new_book.addBook(book_name, author_name, genre)
              
            #option2  
    elif (option=="2"):
                  pass```

您试图将一本书添加到实例本身的列表中。 使用 dunder 方法的简单解决方案如下:

class Book:
    def __init__(self, book_name, author_name, genre):
        self.book_name = book_name
        self.author_name = author_name
        self.genre = genre
        

    def __eq__(self, other):
        if (self.book_name == other.book_name):
            return True
        else: 
            return False
        
    def __str__(self):
        return f"The book {self.book_name} written by {self.author_name} is {self.genre}"

books = []
while True:
    option=input("[-] Choose an operation:\n") 
    
    if option not in ['1','2','3','4','5','6','7','8']:
            print("Please enter a valid operation")

    if option == "1":

                book_name=input ('Enter book name:')
                author_name = input ('Enter author name:')
                genre= input ('Enter genre:')
                new_book=Book(book_name, author_name, genre)
                
                if len(books) > 0:
                    for i, book in enumerate(books):
                        if new_book == book:
                            break
                        else:
                            if i == len(books)-1:
                                books.append(new_book)
                else:
                    books.append(new_book)



            
    elif option == "2":
        for e in books:
            print(e)

我想你可以这样做:

class Book:
    booksList={}
    def __init__(self, book_name, author_name, genre):
        self.book_name = book_name
        self.author_name = author_name
        self.genre = genre
        self.booksList[book_name] = {
            "name":book_name,
            "author":author_name,
            "genre":genre
        }

    def __eq__(self, other):
        if (self.book_name == other.book_name):
            return True
        else: 
            return False

    def __str__(self):
        return f"The book {self.book_name} written by {self.author_name} is {self.genre}"

    def addBook(self, book_name, author_name, genre):
        if book_name not in self.booksList:
          self.booksList[book_name] = {
            "name":book_name,
            "author":author_name,
            "genre":genre
        }
          print("success")
        else:
            print("Book already exists")