Python子类继承父类异常:调用父类__init__后仍提示属性不存在?
问题原因
- 属性命名和调用不匹配是核心问题:父类
Person的__init__方法中,仅将传入的fname、lname参数分别赋值给了实例的firstname、lastname属性,没有创建任何名为fname、lname的实例属性。 - 你调用父类初始化的逻辑本身没有问题,
Teacher类的实例已经成功继承到了firstname、lastname两个属性,报错只是因为打印时写错了目标属性名。
修复方案
以下两种修改方式二选一即可正常运行:
- 调整打印语句的属性名,将报错对应的两行代码替换为:
print(teacher_1.firstname) print(teacher_1.lastname)
- 如果你需要使用
fname、lname作为属性名,修改父类Person的初始化赋值逻辑:
def __init__(self, fname, lname): self.fname = fname self.lname = lname
补充优化建议
你当前调用父类初始化的写法Person.__init__(self, fname, lname)是可用的,更符合Python规范的写法是使用super()方法,不需要硬编码父类名称,后续修改父类时无需调整这部分代码:
def __init__(self, fname, lname, schoolgrade): super().__init__(fname, lname) self.schoolclass = schoolgrade
内容的提问来源于stack exchange,提问作者BertHobe
相关产品推荐
相关产品推荐

