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

Python类方法使用报错:AttributeError问题排查及用法咨询

解决AttributeError: 'Person' object has no attribute 'name'问题

嘿,我来帮你排查这个问题!首先咱们先看你的报错:AttributeError: 'Person' object has no attribute 'name',这说明创建出来的Person实例根本没有name这个属性——但你明明在__init__里赋值了啊?

问题大概率出在代码缩进上!我猜你实际写代码的时候,__init__方法的缩进没有对齐到Person类的内部,导致它不是类的成员方法,而是一个独立的全局函数了。这样当你通过cls(name)创建实例时,Python会调用默认的空__init__方法,自然不会给实例绑定name属性。

咱们来举个错误缩进的反例(这应该就是你实际遇到的情况):

class Person(object):
def __init__(self, name):
    self.name = name
    @classmethod
    def from_classmethod(cls, name):
        return cls(name)

在这段代码里,__init__不属于Person类,类没有自定义构造方法,实例化时不会设置name属性,所以访问p.name就会报错。

而你贴出来的代码结构是正确的,但实际运行报错说明缩进有误。修正后的正确代码如下(确保所有方法都缩进在类内部):

class Person(object):
    def __init__(self, name):
        self.name = name
    
    @classmethod
    def from_classmethod(cls, name):
        return cls(name)

p = Person.from_classmethod("Moctar")
print(p.name)  # 输出结果:Moctar

另外,你并没有错误使用@classmethod特性!这个装饰器的用法完全正确:classmethod接收类本身作为第一个参数cls,通过cls(name)创建实例,这正是classmethod的设计用途——为类提供替代构造方式。

内容的提问来源于stack exchange,提问作者moctarjallo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:15