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

如何在父类内部调用被重写的自身方法?

父类内部强制调用自身方法,避免子类重写影响

我希望在父类内部调用某个方法时,跳过子类重写的版本,直接使用父类自己的实现。以下示例可以清晰说明问题:

class Parent:
    def calculate(self, n):
        return n + 10

    def print_plus_ten(self, n):
        print(self.calculate(n))

class Child(Parent):
    def calculate(self, n):
        return n + 1

    def print_using_parent(self, n):
        print(super().calculate(n))

当创建Parent实例时,print_plus_ten方法能按预期输出参数加10的结果;但创建Child实例时,由于calculate方法被重写,print_plus_ten会输出参数加1的结果。

现在想让print_plus_ten无论在父类还是子类实例中,都始终调用父类的calculate方法。子类里可以通过super()实现(比如示例中的print_using_parent),但父类内部用super()会返回Object,而它没有calculate属性——那父类自身作用域里有没有类似的方式?


解决方案

在父类内部,直接通过类名调用目标方法,并把当前实例self作为第一个参数传入,就能绕过子类的重写,强制调用父类自己的方法。

修改后的Parent类代码如下:

class Parent:
    def calculate(self, n):
        return n + 10

    def print_plus_ten(self, n):
        # 直接指定Parent类调用calculate,传入self实例
        print(Parent.calculate(self, n))

class Child(Parent):
    def calculate(self, n):
        return n + 1

    def print_using_parent(self, n):
        print(super().calculate(n))

这样修改后,无论是Parent实例还是Child实例调用print_plus_ten,都会执行父类的calculate方法,输出参数加10的结果。

内容的提问来源于stack exchange,提问作者Emil Bode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:15:37