首页 > 解决方案 > 在图书列表中搜索 ID

问题描述

我制作了一个简单的图书馆系统,它存储带有 ID、名称和成本的书籍。我的问题很简单,但我对 python 的有限知识让我失望了。

我创建了一个在图书馆中存储书籍的类,它们是这样创建的;

if __name__ == '__main__':
    lib = Library()
    book1 = Book(1, 'Bookname1', "$30")
    book2 = Book(2, 'Bookname2', "$10")
    book3 = Book(3, 'Bookname3', "$40")

我必须通过在我的库类中创建一个函数来创建一个按 ID 搜索书籍的函数。我试图让它像下面的代码一样,但它没有用。基本上,我想给我的函数一个 ID,它应该返回该特定书的名称和成本,但前提是 ID 存在于列表中。

class Book:

    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)


class Library:
    def __init__(self):
        self.books = []

    def add_book(self, Book):
        self.books.append(Book)

    def remove_book(self, Book):
        self.books.remove(Book)

    #def show_id(self, ID):
    #    if ID in lib:
    #        return self.books

    def show_all(self):
        for Book in self.books:
            Book.show()



if __name__ == '__main__':
    lib = Library()
    book1 = Book(1, 'Bookname1', "$30")
    book2 = Book(2, 'Bookname2', "$10")
    book3 = Book(3, 'Bookname3', "$40")
    #1.show_id
    lib.add_book(book1)
    lib.add_book(book2)
    lib.add_book(book3)
    lib.remove_book(book2)
    lib.show_all()

标签: pythonoop

解决方案


我认为如果您需要ID索引,最简单的想法是使用字典

class Library:
    def __init__(self):
        self.books = dict()

    def add_book(self, Book):
        self.books[Book.ID] = Book

    def remove_book(self, Book):
        del self.books[Book.ID]

    def get_book(self, ID):
        return self.books[ID]

    def show_id(self, ID):
        self.get_book(ID).show()

    def show_all(self):
        for Book in self.books.values():
            Book.show()

你甚至可以重命名get_book__getitem__,这第二个名字在 python 中是特殊的,它被称为 dunder 方法(或魔法方法)。实施它将允许您编写lib[id]而不是lib.show_id(id)(我不是说您应该这样做,但这是一种选择)。您可以尝试使用许多其他 dunder 方法来获得乐趣,您可以在python 数据模型中找到其中的一些。

我认为您应该在codereview上发布您的代码,因为您可能会在代码上使用更广泛的建议。


推荐阅读