繁体   English   中英

创建类实例列表

[英]Creating a list of class instances

我正在尝试将一个简单的库系统作为Python中OOP介绍的一部分。 我试图将书籍装入我的图书馆课程时陷入困境。 我做了第一个简单的课程,名为Book,它可以制作书籍,可以显示他们的身份证,姓名和价格等。

现在我试图创建名为Library的实际类。 我想列出图书馆里所有书籍的ID,费用和名称。 在这里我遇到了一个isseu。 我不知道如何将类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)

您的图书馆类应该包含一系列图书(或更具体的图书,取决于您的任务的详细信息)。 这是一个例子:

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

我更喜欢使用不可变集合,以便其他人不能更改类外的库状态。 但是你可以使用一个列表。 你必须要小心。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM