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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:27:18