创建类实例列表

时间:2019-03-20 16:45:45

标签: python oop

我正在尝试制作一个简单的库系统,作为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)

2 个答案:

答案 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