TypeError:正好取2个参数(给定1个)

时间:2013-03-04 21:55:27

标签: python

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)

3 个答案:

答案 0 :(得分:6)

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

x = DoublyLinkedList()

不是

x = DoublyLinkedList

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

答案 1 :(得分:3)

写作时

x = DoublyLinkedList

您将班级DoublyLinkedList分配给x,而不是它的实例。 add_head是一个实例方法,不能直接在类上调用它。相反,您需要使用

x = DoublyLinkedList()
x.add_head(1)

通过这种方式,python将能够用self替换x,并且您的呼叫将有2个参数。

答案 2 :(得分:1)

分配给x

时,需要创建对象的实例
 x = DoublyLinkedList()

允许使用以前的语法(DoubleLinkedList),因为类作为对象有效。