如何解决Python双向链表通过__str__方法打印时返回内存地址而非实际值的问题
如何解决Python双向链表通过__str__方法打印时返回内存地址而非实际值的问题
嘿,我来帮你排查这个问题!首先咱们先梳理下你遇到的状况:你想用双向链表的__str__方法打印链表内容,但结果却显示了内存地址而不是实际数据。结合你给出的代码,我整理了几个可能的原因和对应的解决办法:
1. 先修复__str__方法里的缩进错误
看你给出的链表__str__代码,node = node._next这一行的缩进有问题——它的缩进比while循环里的其他语句要浅,这会导致语法错误,甚至让循环无法正常推进遍历所有节点。修正后的代码应该是这样的:
def __str__(self): s = "[" node = self._head while node is not None: s += str(node._initial_data) if node._next: s += "->" node = node._next # 这里要和while内的其他语句保持同一缩进级别 s += "]" return s
2. 检查存储的数据是否是未定义__str__的自定义对象
如果你的_initial_data存储的是一个你自己定义的类的实例,而这个类没有实现__str__或__repr__方法,那么当你调用str(node._initial_data)时,Python就会默认返回该对象的内存地址。解决办法很简单,给这个自定义类加上__str__方法即可:
比如你有一个自定义类:
class MyData: def __init__(self, value): self.value = value # 添加这个方法,让它返回可读的字符串 def __str__(self): return str(self.value) # 这里可以根据你的需求返回任意格式的字符串
3. 可选:给Node类添加__str__方法(方便单独打印节点)
如果你有时候需要单独打印某个Node实例,也可以给Node类加上自己的__str__方法,这样直接打印节点时也能显示数据而不是内存地址:
class Node: def __init__(self, initial_data, prev=None, next=None): self._initial_data = initial_data self._prev = prev self._next = next def __str__(self): return str(self._initial_data)
按照上面的步骤调整后,你的链表__str__方法应该就能正常输出节点的实际数据啦!
备注:内容来源于stack exchange,提问作者Rigo Estrada
相关产品推荐
相关产品推荐

