2017-10-20 134 views
0

,所以我有两个类 - 一个是作为一个双向链表和其他类实现的图书库是一本书节点的DLL节点类是这样的:蟒蛇双向链表类

class Book: 
def __init__(self,name,author,dateadded,viewed = False, nextnode=None, prevnode=None): 
    self._name = name 
    self._author = author 
    self._dateadded = dateadded 
    self._viewed = viewed 
    self._next = nextnode 
    self._prev = prevnode 

def __str__(self): 
    """ Return string representation of book """ 
    outstr = "" 
    outstr += self._name + " /n" 
    outstr += self._author + "/n" 
    outstr += self._dateadded 
    return outstr 

def read(self): 
    """ Simulates the book being read & return string representation of the book """ 
    self._viewed = True 
    outstr = "CURRENTLY READING: " 
    outstr += self._name 
    return outstr 

我的图书库类的书节点序列交易,看起来是这样的:

class BookLibrary: 

""" A Doubly Linked List implementing a book library """ 

def __init__(self): 
    self.size = 0 
    self.head = None 
    self.tail = None 

遇到的问题IM是我add_book()方法中 - 当我运行它的错误即时得到是TypeError: add_book() takes 1 positional argument but 5 were given。这是函数本身,我真的不知道我去错了:(

def add_book(book): 
    """ Add a book to the library in decreasing order of dateadded """ 
    n = Book(book) 
    if self.size == 0: 
     self.head = n 
     self.tail = n 
     current_book = n 
     self.size += 1 

    elif self.head._dateadded <= n._dateadded: 
     n._next = self.head 
     self.head._prev = n 
     n._prev = None 
     self.head = n 
     self.size += 1 

    elif self.tail._dateadded <= n._dateadded: 
     self.tail._prev._next = n 
     n._prev = self.tail._prev 
     n._next = self.tail 
     self.tail._prev = n 
     self.size += 1 

    elif self.size != 0: 
     iterator = self.head._next 
     while iterator._next is not None: 
      if n._dateadded >= iterator._dateadded: 
       n._prev = iterator._prev 
       iterator._prev._next = n 
       n._next = iterator 
       iterator._prev = n 
       self.size += 1 
       break 
      else: 
       iterator = iterator._next 
    return None 

我真的很感激任何帮助,谢谢

这是我运行代码:

book_lib = BookLibrary() 
book_lib.add_book("Harry Potter", "JK ROWLING", 19990101, False) 

回答

2

如果你传递的所有参数都是add_book(),你可以通过class Book,这是你的问题,它只是期待一个参数,book,但我假设你传递了所有的参数class Book期望秒。

您最好首先实例化您的书籍对象,然后直接将它们传递给add_book方法。

+0

我明白你说的是什么,但没有实例化该行对象:'n = Book(book)'在add_book()'方法中已经有 – DecafOyster208

+1

没有你需要在你的主代码中实例化它,理想情况下,你会创建一本书,然后将其添加到图书馆。但如果你想动态地添加它,你可以做'book_lib.add_book(Book(“哈利波特”,“JK ROWLING”,19990101,False))' – 0TTT0

+1

也,如果你想要你的代码运行你将不得不将'self'作为第一个参数添加到'add_book''def add_book(self,book):' – 0TTT0