Python自定义Node类打印neighbours属性显示内存地址该如何解决?
问题原因
你自定义的Node类没有定义实例的字符串表示方法,Python打印自定义类的实例时,默认会输出<类名 object at 内存地址>格式的内容。你存在neighbours列表里的都是Node类的实例,所以打印时就会显示内存地址而不是预期的节点名称。
解决方案
共有两种常用的解决方法:
方法1:给
Node类添加__repr__魔法方法,定义实例作为容器元素打印时的显示效果
代码修改如下:class Node: def __init__(self, name): self.name = name self.neighbours = [] # 新增__repr__方法定义实例打印效果 def __repr__(self): # 如果只需要显示节点名直接返回self.name即可 return self.name # 如果需要更清晰的标识可以用下面的写法 # return f"Node(name='{self.name}')"修改完成后运行原代码,输出结果为
{'a': ['d']},符合预期。方法2:不修改类定义,构造关系字典时主动提取节点的name属性
直接将node_rela[a.name] = a.neighbours替换为下面的代码即可:node_rela[a.name] = [node.name for node in a.neighbours]该方法会直接将邻居列表里的所有
Node实例转换为名称字符串存入字典,打印时自然就不会出现内存地址。
内容的提问来源于stack exchange,提问作者EmptyMind
相关产品推荐
相关产品推荐

