将对象添加到列表 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")
我是 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")