AttributeError: 'Stud' object has no attribute 'sno'(第11行)报错问题咨询
报错产生原因
- 你的代码在
__init__构造方法的第一行就调用了displval()方法,而displval()中需要访问实例属性self.sno、self.sname - Python的类实例属性是执行到对应的赋值语句时才会被创建,你调用
displval()的时候,self.sno = int(input(...))、self.sname = input(...)这两行赋值语句还没有执行,实例根本不存在sno这个属性,所以触发了AttributeError。
解决方案
最常用的方案是调整__init__方法内的执行顺序,先完成属性赋值再调用打印方法,修改后的代码如下:
class Stud: def __init__(self): print("I am Constructor") self.sno = int(input("Enter the roll number")) self.sname = input("Enter the Name") # 赋值完成后再调用打印方法 self.displval() def displval(self): print("="*50) print(self.sno) print(self.sname) so = Stud()
如果业务逻辑确实需要在赋值前调用displval(),可以在类定义阶段给属性设置默认初始值:
class Stud: # 提前设置类属性默认值,实例未赋值时会自动 fallback 到类属性 sno = None sname = None def __init__(self): self.displval() print("I am Constructor") self.sno = int(input("Enter the roll number")) self.sname = input("Enter the Name") def displval(self): print("="*50) print(self.sno) print(self.sname) so = Stud()
内容的提问来源于stack exchange,提问作者chetan chaudhari
相关产品推荐
相关产品推荐

