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__
有两个参数:self
和value
。
当你在 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 个 // 链接列表 [重复]