Python继承问题:无法访问父类方法
子类访问父类方法触发AttributeError问题排查与解决
问题场景
开发Python项目时,通过继承创建基类与派生类,尝试在子类中调用父类方法时触发AttributeError,提示方法不存在。
问题代码
class MyBaseClass: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!" class MyDerivedClass(MyBaseClass): def __init__(self, name, age): super().__init__(name) self.age = age def display_info(self): # Problematic line greeting = self.greet() # This results in an AttributeError return f"{greeting} I am {self.age} years old." obj = MyDerivedClass("John", 25) print(obj.display_info())
问题原因
核心问题是代码缩进错误:
- 基类
MyBaseClass中的__init__和greet方法未正确缩进在类的作用域内,导致这两个方法并未成为类的成员; - 子类
MyDerivedClass中的__init__和display_info方法同样存在缩进错误。
Python依赖缩进划分代码块,错误的缩进会让方法脱离类的作用域,子类自然无法继承到父类的greet方法,调用时就会触发AttributeError。
修正后的代码
class MyBaseClass: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!" class MyDerivedClass(MyBaseClass): def __init__(self, name, age): super().__init__(name) self.age = age def display_info(self): greeting = self.greet() return f"{greeting} I am {self.age} years old." obj = MyDerivedClass("John", 25) print(obj.display_info())
说明
修正缩进后,子类MyDerivedClass能正常继承父类MyBaseClass的greet方法,调用self.greet()即可获取父类方法的返回值,代码执行后会输出:Hello, John! I am 25 years old.
你的继承设置(MyDerivedClass(MyBaseClass))和父类初始化(super().__init__(name))都是正确的,问题并非继承逻辑或作用域的设计错误,纯粹是代码格式的缩进问题。
内容的提问来源于stack exchange,提问作者Divyansh Singh
相关产品推荐
相关产品推荐

