为何链表数组输出节点地址而非空节点?如何实现空节点输出?
解决打印Node列表显示内存地址而非期望字符串列表的问题
嘿,我完全懂你现在的困惑!你打印x.getMake()时看到的是一堆类似<__main__.Node object at 0x...>的内容,而不是['','','','','','','',''],核心原因是:
你打印的是**Node类实例的列表**,Python默认会使用对象的__repr__方法来显示它,而这个方法的默认实现就是输出对象的类名和内存地址,不是你想要的节点名称。
下面给你两种简单的解决办法:
方法1:临时提取节点名称(不修改类)
直接遍历列表,调用每个Node对象的getName()方法提取名称,生成新的字符串列表再打印:
x = Linkedlist(8) # 用列表推导式提取每个节点的name属性 print([node.getName() for node in x.getMake()])
运行这段代码就会输出你期望的['','','','','','','','']。
方法2:给Node类添加__repr__方法(长期通用)
如果你希望以后任何时候打印Node对象都能直接显示名称,那可以给Node类添加一个自定义的__repr__方法,覆盖默认的实现:
class Node: def __init__(self, Name, Pointer =-1): #-1代表空值 self.__name = Name self.__pointer = Pointer def getName(self): return self.__name def getPointer(self): return self.__pointer def setName(self, Name): self.__name = Name def setPointer(self, Pointer): self.__pointer = Pointer # 添加这个方法,自定义对象的字符串表示 def __repr__(self): return repr(self.__name) class Linkedlist: def __init__(self, size): self.__Make = [Node('') for i in range (size)] def getMake(self): return self.__Make x = Linkedlist(8) print(x.getMake()) # 现在直接打印就能得到['','','','','','','','']
简单解释下__repr__:这个方法是Python用来生成对象“官方”字符串表示的,当你打印对象或者把对象放在列表里打印时,都会调用它。我们让它返回节点的__name属性的字符串表示,这样就能得到你想要的结果啦。
内容的提问来源于stack exchange,提问作者Spencer Ng




