Python类函数缺失self位置参数求助:链表size函数报错
嘿,我来帮你揪出这个错误的根源!
问题核心原因
你遇到的TypeError: get_next() missing 1 required positional argument: 'self',本质是调用实例方法的方式错了——你大概率是直接用Node.get_next()这种类名调用的方式,而不是用Node的具体实例对象去调用。
因为get_next()是实例方法,定义里的self参数代表的是当前类的实例本身,Python会在你用实例调用方法时自动把实例传入self。但如果直接用类名调用,Python没办法自动填充这个self参数,自然就会报缺少参数的错。
为什么另一个方法没问题?
你说另一个用到get_next()的方法没报错,那肯定是那个方法里是用链表的节点实例来调用的,比如像这样:
current_node.get_next()
而你的size函数里,估计是写成了Node.get_next()这种错误的调用方式。
修复示例
假设你的size函数原本是错误写法:
def size(self): count = 0 current = self.head while current is not None: count += 1 current = Node.get_next() # 这里就是错误根源! return count
只需要把调用方式改成用当前节点实例调用:
def size(self): count = 0 current = self.head while current is not None: count += 1 current = current.get_next() # 用current这个实例调用get_next return count
另外先确认你的Node类里的get_next方法定义是正确的(应该带self参数):
class Node(object): def __init__(self, data=None, next_node=None): self.data = data self.next_node = next_node def get_next(self): return self.next_node # 正确接收self参数,返回实例的next_node属性
总结
所有定义时带self的实例方法,都必须通过类的具体实例对象来调用,不能直接用类名调用,否则Python无法自动传入self参数,就会触发你遇到的这个错误。
内容的提问来源于stack exchange,提问作者marifkind
相关产品推荐
相关产品推荐

