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

如何在子类中调用父类方法并让其使用自身实例变量

解决Python子类调用父类方法时使用父类自身实例变量的问题

这个问题的核心在于:当你在子类中通过super()调用父类方法时,方法里的self仍然指向子类的实例,所以父类方法会访问子类实例上已经被覆盖的属性(也就是你设置的where='child')。要让父类方法使用自己的实例变量,我们可以通过两种直观的方式实现:

方法一:直接创建父类实例调用方法

最简单的思路是在子类中显式创建一个父类的独立实例,调用它的show()方法——这样父类方法自然会使用自己实例的where变量,完全不受子类属性的影响:

class Parent():
    def __init__(self):
        self.where = 'parent'
    def show(self):
        print("Inside Parent", self.where)
class Child(Parent):
    def __init__(self):
        self.where = 'child'
        # 创建父类实例并调用show,此时使用父类自身的where值
        Parent().show()
        self.show()
    def show(self):
        print("Inside Child", self.where)

# Driver's code
obj = Child()

运行这段代码会输出:

Inside Parent parent
Inside Child child

方法二:先初始化父类属性,临时切换属性值调用父类方法

如果你不想额外创建父类实例,可以先让父类完成自身属性的初始化,保存父类的属性值后再设置子类的属性,调用父类方法时临时切换回父类的属性值:

class Parent():
    def __init__(self):
        self.where = 'parent'
    def show(self):
        print("Inside Parent", self.where)
class Child(Parent):
    def __init__(self):
        # 先调用父类初始化,得到父类的where值
        super().__init__()
        parent_where = self.where
        # 设置子类自己的where属性
        self.where = 'child'
        # 临时切换回父类的where,调用父类show方法
        self.where = parent_where
        super().show()
        # 切回子类的where,调用自己的show方法
        self.where = 'child'
        self.show()
    def show(self):
        print("Inside Child", self.where)

# Driver's code
obj = Child()

这种方式同样能得到你想要的输出,适合需要复用父类实例其他属性的场景。

原代码不符合预期的原因

再补充下原代码的问题:你在子类__init__中先给self.where='child',此时self是子类实例,之后调用super(Child, self).show()时,父类的show方法访问的是子类实例上已经被覆盖的where属性,所以才会输出Inside Parent, child。

内容的提问来源于stack exchange,提问作者Mr. Sigma.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:04:07