在Python中创建类时,如何修复这些错误以进行简短的赋值?

时间:2013-04-24 01:24:05

标签: python class

我需要完成一项与创建课程有关的简短作业,而且我不确定代码的问题是什么。以下是下面的说明,这是我的代码。请解释我的错误是什么以及如何修复它们:

建立2个班级。第一堂课将是" Book"类。书类有4个变量都是私有的。第一个是checkedOut,它是一个初始化为false的布尔值,title是一个由输入变量初始化的字符串,作者是一个字符串,由输入变量初始化,页面是一个整数,也是由一个整数初始化的输入变量。这个类还将有4个与之关联的函数。第一个将返回变量checkedOut。第二个将更改checkedOut的值。如果该值设置为true,则它将更改为false,反之亦然。第三个函数将返回页数,最终函数将返回标题。当书籍对象被打印时,它的格式为"标题作者页面checkedOut"。

第二个类将被称为库。初始化库时,它将创建一个名为collection的空字典。库类将具有2个函数。第一个函数将被称为addBook,它将接收3个输入变量,标题,作者和页面。在此函数中,您将创建一个book对象,然后将其添加到字典中,并将标题作为键。第二个功能将采用书的标题,在字典中查找该书并调用更改checkedOut状态的书籍功能。最后,当打印出一个库对象时,它将在一个单独的行中打印出库中的每本书。

最后,库类将在名为main.py的python程序中实现。

这是我的代码:

class Book:

    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    checkedOut = False

    def checked_Out(self):
        print(checkedOut)
        return checkedOut

    def change_value_of_checkedOut(self):
        if checkedOut == False:
            checkedOut = True
            print("Switched from False to True.")
        elif checkedOut == True:
            checkedOut = False
            print("Switched from True to False.")

    def return_pages(self):
        print(pages)
        return pages

    def return_title(self):
        print(title)
        return title



class Library(Book):
    def __init__(self):
        collection = {}

    def addBook(self, title, author, pages):
        new_book = Book()
        collection[title] = author

    def change_checked_out_status(self, title):
        if title in collection:
            new_book.change_value_of_checkedOut(self)
        else:
            print("This book is not in the collection.")

我在这里做了什么错了?当我尝试创建对象并在IDLE中运行代码时,我不断得到错误,因为没有定义某个变量名。

2 个答案:

答案 0 :(得分:3)

(0)下次粘贴错误。

class Book:

    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    checkedOut = False

    def checked_Out(self):
        print(checkedOut)
        return checkedOut

(1)就是这部分。

checkedOut未定义。你在哪里看到checkedOut?在函数checked_Out正上方。好的。简短回答,添加self.

示例:

    def checked_Out(self):
        print(self.checkedOut)
        return self.checkedOut

你真的不应该在那里做标题,作者的东西。它们成为类变量,而不是实例变量。有区别。

(2)如果您仍在使用2.x Python,请避免使用input

使用raw_input并删除str。那更安全。在3.x中你可以使用输入,它将始终是字符串(raw_input将始终返回字符串)。这也引起了问题。

(3)你有把所有东西都限制在其中的余地。我通常很冷,但有点不好。不要将它称为checked_Out,这实际上是不一致的,而Python程序员更喜欢checked_outcheckedOut可以命名为checked_out,嘿,你可以发生冲突。不要将您的函数和变量命名为如此相似。

答案 1 :(得分:0)

单独创建类,并单独获取输入。另外,您要提到的是,每个变量都是一个实例变量,而不是在本地范围内:

class Book:
    def __init__(self, title, author, pages):
        self.title = title
        self.author = author
        self.pages = pages
        self.checkedOut = False

    def checked_Out(self):
        print(self.checkedOut) # it has to be the instance variable
        return self.checkedOut

    def change_value_of_checkedOut(self):
        if self.checkedOut == False:
            self.checkedOut = True
            print("Switched from False to True.")
        elif self.checkedOut == True:
            self.checkedOut = False
            print("Switched from True to False.")

    def return_pages(self):
        print(self.pages)
        return self.pages

    def return_title(self):
        print(self.title)
        return self.title

class Library:
    def __init__(self):
        collection = {}

    def addExistingBook(self, book):
        collection[book.title] = book.author

    def addNewBook(self, title, author, pages): # create a book
        new_book = Book(title, author, pages)
        collection[title] = new_book.author # access the author

    def change_checked_out_status(self, title):
        if title in collection.keys():
            title.change_value_of_checkedOut()
        else:
            print("This book is not in the collection.")

然后,在main函数中添加其余部分:

def main():
    # if you are using Python 2.x, change input() to raw_input()
    title = str(input("Enter the title of the book. "))
    author = str(input("Enter the author of the book. "))
    pages = int(input("Enter the number of pages in the book. "))
    myBook = Book(title, author, pages)
    myLib = Library()
    myLib.addExistingBook(myBook)