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

如何在Python父类中调用子类的变量与方法?

解决父类调用子类方法获取子类属性的问题

首先你代码里有几个明显错误:

  • Parent类的__init__方法里self.name = name,但没传入name参数,实例化时会直接报错;
  • 字符串格式化写法错误,应该是f"字符串{变量}",不是"字符串f{变量}";
  • Child类的初始化逻辑不对,继承父类时应该用super().__init__()初始化父类属性,而非直接传入Parent实例取name。

回到你的核心需求:让父类能调用子类方法获取子类的年龄。这里要明确父类本身不能直接调用子类方法(违背继承的依赖原则,父类不应依赖子类实现),正确做法是利用多态:父类定义通用方法,调用一个需要子类实现的“约定方法”,子类重写这个方法返回自身属性,这样子类实例调用父类方法时,会自动执行子类的实现。

修正后的代码示例

class Parent():
    def __init__(self, name):
        # 修正初始化逻辑,接收name参数
        self.name = name
    
    def print_child_age(self):
        # 父类方法,调用子类需要实现的方法来获取年龄
        child_age = self.get_child_age()
        print(f"孩子的年龄是:{child_age}")

class Child(Parent):
    def __init__(self, name):
        # 调用父类初始化方法完成属性继承
        super().__init__(name)
        # 定义子类自身的年龄属性
        self.age = 13
    
    def get_child_age(self):
        # 子类实现父类约定的方法,返回自己的年龄
        return self.age

# 实例化子类对象
c = Child("小明")
# 通过子类实例调用父类方法,会自动触发子类的get_child_age实现
c.print_child_age()

逻辑说明

  1. 父类Parent定义print_child_age方法,它依赖一个get_child_age方法,但父类无需实现该方法(若要强制子类实现,可使用抽象基类);
  2. 子类Child继承Parent后,实现get_child_age方法返回自身年龄;
  3. 当子类实例调用父类的print_child_age时,self指向子类实例,因此会调用子类的get_child_age方法,最终拿到子类的年龄并打印。

如果想直接用父类实例调用子类方法,这不符合继承的设计逻辑——父类实例和子类实例是完全独立的对象,正确的实现始终是通过子类实例触发父类方法,借助多态获取子类的属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:57:08