【问题标题】:TypeError: DoubleLinkedList.add() takes 1 positional argument but 2 were givenTypeError:DoubleLinkedList.add() 采用 1 个位置参数,但给出了 2 个
【发布时间】:2022-01-04 09:54:11
【问题描述】:

我收到此错误。我经历了这个概念,但找不到错误。我正在制作一个链接列表,但在给出值时它向我显示此错误 TypeError: DoubleLinkedList.add() 需要 1 个位置参数,但给出了 2 个我通过了以下概念,但我找不到错误或做什么。我是python编程新手

        class Node:
            def __init__(self, value):
                self.next = None
                self.prev = None
                self.val = value
        
        
        class DoubleLinkedList:
            def __init__(self, ):
                self.head = None
                self.tail = None
                self.size = 0
        
            def add(self):
                node = Node()
                if self.tail is None:
                    self.head = node
                    self.tail = node
                    self.size += 1
                else:
                    self.tail.next = node
                    node.prev = self.head
                    self.tail = node
                    self.size += 1
        
            def __str__(self):
                vals = []
                node = self.head
                while node is not Node:
                    vals.append(node.val)
                    node = node.next
                return f"[{','.join((str(val) for val in vals))}]"
        
        
        my_list = DoubleLinkedList()
        
        my_list.add(1)
        my_list.add(5)
        my_list.add(2)
        
        print(my_list)
    
    ```

【问题讨论】:

  • 您的add 函数缺少类似value 的参数,您应该将其传递给Node(value)

标签: python python-3.x


【解决方案1】:

您看到此错误的原因是因为您只让add(self) 有一个位置参数,即self。你想要的是如下内容:

def add(self, value):
    node = Node(value)
    if self.tail is None:
        self.head = node
        self.tail = node
        self.size += 1
    else:
        self.tail.next = node
        node.prev = self.head
        self.tail = node
        self.size += 1

请注意,此答案不会寻找您的逻辑,只是为了解决您关于位置参数的问题。

另外,self 是 Python 中用于实例变量和方法的特殊关键字。当您创建一个新的 Node 实例为 node = Node() 时,您会自动传递 self 参数,add 方法也是如此。

当您调用my_list.add(1) 时,Python 天生将其理解为

my_list.add(self,1)

当然,这里self 等于my_list。这就是为什么 Python 会告诉你“我已经得到了self,但是,你传递了另一个值,所以我会抛出一个错误。

【讨论】:

    【解决方案2】:

    你必须像这样修改你的添加函数

        def add(self, value):
            node = Node(value)
            if self.tail is None:
                self.head = node
                self.tail = node
                self.size += 1
            else:
                self.tail.next = node
                node.prev = self.head
                self.tail = node
                self.size += 1
    

    你也应该修改一下__str__函数

    def __str__(self):
        vals = []
        node = self.head
        while node is not None:
            vals.append(node.val)
            node = node.next
        return ','.join((str(val) for val in vals))
    

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 2013-10-28
      • 2020-05-20
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 2019-01-06
      相关资源
      最近更新 更多