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

为什么Python类__init__中用self.age判断报AttributeError,用age参数正常?

报错原因解析
  • Python实例化类的时候,构造方法__init__的执行逻辑是按代码顺序从上到下运行的,在给实例属性赋值之前,实例上不存在对应的属性。
  • 你写的初始代码中,if self.age >=18这行判断的执行时机,在self.age = age赋值语句之前。此时实例self还没有被绑定age属性,读取不存在的实例属性自然会抛出AttributeError。
修改后代码正常运行的原因

你把判断条件改成直接使用__init__的形参age,这个参数是实例化时传入的参数值,在__init__方法被调用时就已经完成赋值,属于方法内的局部变量,不需要依赖实例属性就能直接读取,因此不会报错。

额外优化提示

你当前的代码逻辑存在隐藏问题:如果传入的年龄小于18,判断不通过的情况下,不会给实例绑定name、age、miles三个属性,后续你访问这些属性或者调用run、name_1方法依然会报错。建议补充else分支处理不符合年龄条件的情况,比如直接抛出参数异常:

def __init__(self,name,age,miles):
    if age>=18:
        self.name=name
        self.age=age
        self.miles=miles
    else:
        raise ValueError("学生年龄必须大于等于18")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:06:02