You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:22:42