AttributeError求助:Graph类无edges_list属性问题排查
问题原因与修复方案
错误根源
报错AttributeError: type object 'Graph' has no attribute 'edges_list'的核心原因:
edges_list是Graph类的实例属性,只有创建Graph对象(比如graph = Graph('edges.csv'))时,才会在__init__中初始化该属性。- 你在
__main__里用Graph.generate_graph(Graph,'edges.csv')调用方法时,是把Graph类本身作为self传入,但类本身并没有edges_list属性,因此触发报错。 - 额外问题:创建
graph实例时,__init__方法已经自动调用了generate_graph,手动调用完全多余。
修复代码
只需删除错误的手动调用,修改后的__main__块如下:
if __name__ == '__main__': graph = Graph('edges.csv') # 以下是错误代码,直接删除 # Graph.generate_graph(Graph,'edges.csv')
额外优化建议
- 文件资源管理:
nodes_file未使用with语句,易导致资源泄漏,建议修改为:with open('nodes.csv','r') as nodes_file: nodes_file_content = nodes_file.readlines() # 若无需使用nodes_file_content,可直接省略这行 - 参数冗余处理:
generate_graph的edges_file参数未被使用,方法内硬编码了'edges.csv',建议统一使用实例的self.edges_file:
同时将def generate_graph(self): # 移除edges_file参数 with open(self.edges_file, 'r') as edges_file: # 后续逻辑保持不变__init__里的调用改为self.generate_graph() - 节点创建优化:当前代码中
self.node_set.add(self.Node(node_name).name)无需创建Node实例,直接添加字符串即可节省内存:self.node_set.add(node_name) self.node_set.add(neighbor_name)
内容的提问来源于stack exchange,提问作者Noam Cohen
相关产品推荐
相关产品推荐

