我正在尝试制作一个简单的库系统,作为Python OOP入门的一部分。我陷入了试图使书籍适合我的图书馆课堂的困境。我制作了第一个简单的类,称为Book,它使书可以显示其ID,名称和价格等。
现在,我正在尝试创建名为Library的实际类。我想列出图书馆中所有书籍的ID,费用和名称。在这里,我遇到了一个问题。我不知道如何将Book类的实例添加到我在Library中创建的列表中,我的代码可以在这里找到。
class Library(object):
def __init__(self, book):
self.book = book
def add_item(self, book):
mylist.append(book)
return mylist
if __name__ == '__main__':
booklist = []
Book1 = Book(1, 'Bookname1', "$30")
Book2 = Book(2, 'Bookname2', "$10")
Book1.show()
Book1.get_attribute_string()
和书籍的代码,我希望保持不变。当然,我可以接受建议,但是我对Python的OOP不太了解,所以不要建议复杂的事情!谢谢。
class Book(object):
def __init__(self, ID, name, price):
self.ID = ID
self.name = name
self.price = price
def show(self):
print(self.ID, self.name, self.price)
def get_attribute_string(self):
print(str(self.ID) + '_' + str(self.name) + '_' + str(self.price))
def get_id(self):
print(self.ID)
def get_name(self):
print(self.name)
def get_price(self):
print(self.price)
答案 0 :(得分:0)
您的库类可能应该包含一本书的集合(或更具体的内容,取决于您的任务的详细信息)。这是一个示例:
class Library(object):
def __init__(self, book):
# collection of library books. This is the library state
self.books = tuple()
def add_item(self, book):
# add an item to the collection
self.books += (book, )
return self.books
我更喜欢使用不可变的集合,这样其他人就不能在类之外更改库状态。但是您可以使用列表。您只需要小心。
答案 1 :(得分:0)
类Library
需要一个属性,例如books
。在此列表中,存储了所有书籍。您需要在__init__
方法中对其进行定义,以便您可以拥有包含不同书籍的多个库。
class Library:
def __init__():
self.books = []
def add_book(book):
self.books.append(book)
def get_books(self):
return self.books
def show_books(self):
# This is one possible example how you can print all books
for book in self.books:
print(str(book))
class Book:
pass # Your Book code
def __str__(self):
return f"{self.name}, {self.id}, {self.price}"
# Returns a string with all attributes of the string.
# Note that is a f-string, but you can use any string
# This function is called, when you call str(book1)
if __name__ == "__main__":
book1 = Book()
book2 = Book()
lib = Library()
lib.add_book(book1)
lib.add_book(book2)
lib.show_books()
all_books = lib.get_books()
also_all_books = lib.books