永发信息网

python链表:TypeError: add() missing 1 required positional argument: 'item'。这个错误怎么改正?

答案:3  悬赏:60  手机版
解决时间 2021-12-22 14:09
  • 提问者网友:骑士
  • 2021-12-22 05:12
我是python的初学者,在写链表操作的时候,用a.add(10)往节点里添加10,它提示我:TypeError: add() missing 1 required positional argument: 'item'。我用的是python3.3。我怎么没看懂怎么回事呢?错在哪里了?求大神指点迷津。
class linkNote :
def __init__(self):
self._head = None
self._size = 0

def __len__(self):
return self._size

def __contains__(self,target):
curNode = self._head
while curNode is not None and curNode.item != target:
curNode = curNode.next
return curNode is not None

def add( self, item ):
newNode = _BagListNode( item )
newNode.next = self._head
self._head = newNode
self._size += 1

def remove(self, item):
preNode = None
curNode = self._head
while curNode is not None and curNode.item != item:
preNode = curNode
curNode = curNode.next
self._size -= 1
if curNode is head :
self._head = curNode.next
else:
preNode.next = curNode.next

def __iter__(self):
return _BagIterator(self._head)

class _BagListNode( object ):
def __init__( self, item ):
self.item = item
self.next = None

if __name__ == "__main__":
a = linkNote
最佳答案
  • 五星知识达人网友:蕴藏春秋
  • 2021-12-22 05:30
python 2.6用add很正常啊,add看起来没啥问题,到是别的函数有些小问题。


1. remove前判断下这个item是不是存在
2.if curNode is head : 应该是 if curNode is self._head
3._BagIterator(self._head) 是个什么东西? 自己写了一个
4. 下划线最好不要加,除非你知道它是用来干什么的.
5.a = linkNode() 而不是 a = linkNode
class linkNode:
    def __init__(self):
        self._head = None
        self._size = 0
    def __len__(self):
        return self._size
    def __contains__(self,target):
        curNode = self._head
        while curNode is not None and curNode.item != target:
            curNode = curNode.next
        return curNode is not None
    def add( self, item ):
        newNode = BagListNode( item )
        newNode.next = self._head
        self._head = newNode
        self._size += 1
    def remove(self, item):
        preNode = None
        curNode = self._head
        if not item in self:
            print item," is not exist."
            return None
        while curNode is not None and curNode.item != item:
            preNode = curNode
            curNode = curNode.next
        self._size -= 1
        if curNode is self._head :
            self._head = curNode.next
        else:
            preNode.next = curNode.next
    def __iter__(self):
        curNode = self._head
        while True:
            yield curNode
            if curNode.next is not None:
                curNode = curNode.next
            else:
                break
class BagListNode( object ):
    def __init__( self, item ):
        self.item = item
        self.next = None
全部回答
  • 1楼网友:詩光轨車
  • 2021-12-22 06:34
你定义的函数,有两个必选参数x和y,一个可选参数other。 但是你调用函数是只给了一个2.3,所以会报错提示缺钱赋值给参数'y'的值 你照着书本抄,估计是把逗号抄成点号了,所以【2,3】成了【2.3】 所以要给两个参数就行。 比如:power(2,3)
  • 2楼网友:冷風如刀
  • 2021-12-22 06:19
a = linkNode 这句代码不是初始化一个实例,而是让a称为linkNode的别名而已。 要初始化一个实例,你需要多一对括号: a = linkNode() 在Python 2.7.3上直接运行你的代码,再加上a.add(10),出错信息是: Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> a.add(10) TypeError: unbound method add() must be called with linkNote instance as first argument (got int instance instead) 也即解释器会判断第一参数的类型是否匹配。 没安装Python3,不知道你的错误信息是怎么出现的。如果Python 3没有做类型匹配判断的话,可能是因为解释器没有向其传递默认的self参数(因为没有),就把你传进去的10当成self,所以就少了item参数了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯