Python链表类arrayToLL方法三种调用场景的问题解析
问题原因解析
1. 无self参数时实例调用报错
Python里用实例调用类的方法,会自动把实例本身作为第一个参数传给方法。比如你写ll.arrayToLL(arr),Python实际会传两个参数:ll(实例)和arr(你传入的数组)。但你定义的arrayToLL只接受1个参数,自然就会触发“takes 1 positional argument but 2 were given”的报错。
2. 添加self参数后实例调用输出为空
这种情况一般是你在arrayToLL方法里,没有正确修改LinkedList实例的属性。比如你的类应该有head属性来存储链表头,但你生成节点链后,没把链的头节点赋值给self.head;或者构建链表时逻辑出错,节点之间没正确连接。另外也可能是类的__str__方法没写对,没法正确遍历输出链表内容,但核心问题还是方法没把生成的链表和当前实例绑定起来。
3. 移除self参数后类调用成功
直接用类调用LinkedList.arrayToLL(arr)时,Python不会自动传递实例参数,方法只需要处理你传入的数组就行。这时候这个方法本质是个普通函数,它内部应该是自己创建了一个新的LinkedList实例,把生成的链表节点链绑定到这个实例的属性上,最后返回这个实例,所以你能得到预期的链表内容。但这种写法属于工厂方法范畴,不是标准的实例方法用法。
内容的提问来源于stack exchange,提问作者seli
相关产品推荐
相关产品推荐

