-2
class DLLNode(object):

    def __init__(self, data, prev_link, next_link):  
        self.data = data
        self.prev_link = prev_link
        self.next_link = next_link


class DoublyLinkedList(object):

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

    def add_head(self, add_obj):
        self.head=DLLNode(add_obj,None,self.head)

>>> x=DoublyLinkedList
>>> x.add_head(1)
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    x.add_head(1)
TypeError: add_head() takes exactly 2 arguments (1 given)
4

3 回答 3

6

猜测 x 不算作参数,因为它没有被正确实例化。

x = DoublyLinkedList()

不是

x = DoublyLinkedList

不包括括号将DoublyLinkedList模块对象分配给 x,它不会创建一个新对象。

于 2013-03-04T21:57:12.840 回答
3

当你写

x = DoublyLinkedList

您将类分配DoublyLinkedListx,而不是它的实例。add_head作为实例方法,它不能直接在类上调用。相反,您需要使用

x = DoublyLinkedList()
x.add_head(1)

这样,python 将能够替换selfx,并且您的调用将有 2 个参数。

于 2013-03-04T21:58:31.363 回答
1

分配给 x 时需要创建对象的实例

 x = DoublyLinkedList()

前一种语法 (DoubleLinkedList) 是允许的,因为类作为对象是有效的。

于 2013-03-04T22:04:02.633 回答