2017-10-20 12 views
0

ので、私は2つのクラスがある - 1は、二重リンクリストとして実装されている書籍のライブラリであり、他のクラスは、このある本ノードのための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 

た問題イムは、私の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にすることをお勧めします。これは1つの引数(book)を期待していますが、私はあなたが期待しているすべての引数を渡していると仮定しています。class Book s。

書籍オブジェクトのインスタンスを作成してから、直接add_bookメソッドに渡す方がよいでしょう。

+0

私はあなたが言っていることを見ていますが、bookオブジェクトをインスタンス化していません。 'add_book()'メソッドの 'n = Book(book)'はすでに – DecafOyster208

+1

であり、理想的には本を作成し、それを図書館に追加することになります。それを動的に追加したい場合は、 'book_lib.add_book(Book(" Harry Potter "、" JK ROWLING "、19990101、False))' – 0TTT0

+1

も実行できます。 add_book' def add_book(self、book): ' – 0TTT0