Python中__str__方法缩进调整后AttributeError消失的原因咨询
问题原因分析
这个AttributeError的根源完全是缩进层级错误导致的——我来给你拆解清楚:
当你把
__str__方法和__init__、addNeighbor保持“相同缩进”时,大概率是不小心把__str__缩进在了某个类方法(比如__init__)的内部,而不是作为类的直接方法存在。这种情况下,__str__并不是你的类的成员方法,而是那个内部方法里的嵌套函数,Python解释器根本不会把它识别为类的字符串表示方法。当你尝试打印类实例或者调用str()时,Python找不到属于这个类的__str__方法,自然就抛出了AttributeError。而当你粘贴参考代码后,
__str__的缩进被调整到了正确的层级——也就是和__init__、addNeighbor一样,直接属于类的顶层方法(和类的其他方法同级缩进)。这时候Python会正确识别它为类的特殊方法,当需要生成实例的字符串表示时,就能正常调用它,错误自然就消失了。
举个直观的错误示例和正确示例对比:
错误缩进(导致AttributeError)
class GraphNode: def __init__(self, value): self.value = value self.neighbors = [] # 错误:__str__被缩进在__init__内部,是嵌套函数,不是类方法 def __str__(self): return f"Node({self.value}), Neighbors: {[n.value for n in self.neighbors]}" def addNeighbor(self, neighbor): self.neighbors.append(neighbor)
正确缩进(正常运行)
class GraphNode: def __init__(self, value): self.value = value self.neighbors = [] # 正确:__str__和__init__、addNeighbor同级,是类的成员方法 def __str__(self): return f"Node({self.value}), Neighbors: {[n.value for n in self.neighbors]}" def addNeighbor(self, neighbor): self.neighbors.append(neighbor)
简单总结:Python是通过缩进区分代码块的,类的方法必须和类的其他同级方法保持相同的缩进层级,不能嵌套在其他方法内部,否则就会被当成内部函数,无法被外部正常调用。
内容的提问来源于stack exchange,提问作者heretoinfinity
相关产品推荐
相关产品推荐

