如何在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()
逻辑说明
- 父类
Parent定义print_child_age方法,它依赖一个get_child_age方法,但父类无需实现该方法(若要强制子类实现,可使用抽象基类); - 子类
Child继承Parent后,实现get_child_age方法返回自身年龄; - 当子类实例调用父类的
print_child_age时,self指向子类实例,因此会调用子类的get_child_age方法,最终拿到子类的年龄并打印。
如果想直接用父类实例调用子类方法,这不符合继承的设计逻辑——父类实例和子类实例是完全独立的对象,正确的实现始终是通过子类实例触发父类方法,借助多态获取子类的属性。
内容的提问来源于stack exchange,提问作者Khangesh Matte
相关产品推荐
相关产品推荐

