TypeError: __init__() 接受 2 个位置参数,但给出了 3 个 // 链接列表 [重复]

Posted

技术标签:

【中文标题】TypeError: __init__() 接受 2 个位置参数,但给出了 3 个 // 链接列表 [重复]【英文标题】:TypeError: __init__() takes 2 positional arguments but 3 were given // Linked Lists [duplicate] 【发布时间】:2021-01-15 15:50:27 【问题描述】:

Node 类用一个值和对链表中下一个节点的引用进行实例化。节点的值可以通过节点上的 value 访问。可以通过节点上的 next 访问对列表中下一个节点的引用。

insert 函数获取对链表中第一个节点的引用、新的 和位置,并使用给定值插入新节点列表中的给定位置。

pop 函数获取链表中第一个节点的引用和位置,然后删除链表中该位置的节点。

stringify_linked_list 函数引用链表的第一个节点并返回链表中所有节点的可打印字符串。

但是,当我尝试通过

进行测试时
assert repr(Node(-1, None)) == '<Node (-1)>'

n1 = Node(4, None)
assert n1.value == 4
assert n1.next is None

我得到一个 TypeError: init() 接受 2 个位置参数,但给出了 3 个

到目前为止,我的代码如下。如果您对如何修复它有任何想法,请告诉我。谢谢!

class Node: 
    def __init__(self, value):
        self.value = value
        self.next = None 

def insert(head, value, position):
    new = Node(value) 
    if position ==1: 
        new.next = head
        return new
    current_index = 1
    current_node = head
   
    while current_index< position-1 and current_node is not None:
        current_node = current_node.next
        current_index +=1

    if current_node is None: 
        raise IndexError("Insertion position invalid!")
    else: 
        new.next = current_node.next 
        current_node.next = new 
        return head

def pop(head, position):
    if position==1: 
        return head, head.next 
    current_index = 1
    current_node = head
    while current_index<position-1 and current_node is not None:
        current_node = current_node.next
        current_index += 1
    if current_node is None:
        raise IndexError("Pop position invalid!")
    else:
        current_node.next = current_node.next.next
        return current_node.next , head


def stringify_linked_list(head):
    ret_string = "" 
    pointer = head
    counter = 1
    while pointer is not None:
        ret_string += (str(counter)+":"+str(pointer.value)+"  ") 
        pointer = pointer.next
        counter+=1
    return ret_string

【问题讨论】:

这能回答你的问题吗? TypeError: method() takes 1 positional argument but 2 were given 【参考方案1】:

您的__init__ 有两个参数:selfvalue

当你在 python 中创建一个新对象时,self 总是自动传递给构造函数作为对新创建的对象(本身)的引用。 所以你的__init__ 需要两个参数,但你已经传递了两个 - 并且 self 被添加为第三个。当您调用Node(4, None) 时,__init__ 被调用为__init__(self, 4, None),但它只需要__init__(self, 4)

要解决这个问题,要么在你的 init 中添加第三个参数,要么在你调用 Node() 时删除第二个参数(无论如何都是 None?)。

【讨论】:

以上是关于TypeError: __init__() 接受 2 个位置参数,但给出了 3 个 // 链接列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: __init__() 接受 1 个位置参数,但给出了 3 个

TypeError: module.__init__() 最多接受 2 个参数(给定 3 个)

图表类:TypeError:__init__() 接受 1 个位置参数,但给出了 3 个

TypeError: __init__() 接受 2 个位置参数,但给出了 3 个 // 链接列表 [重复]

TypeError: __init__() 得到了一个意外的关键字参数“评分”

PyTorch - TypeError: forward() 接受 1 个位置参数,但给出了 2 个