如何在父类内部调用被重写的自身方法?
父类内部强制调用自身方法,避免子类重写影响
我希望在父类内部调用某个方法时,跳过子类重写的版本,直接使用父类自己的实现。以下示例可以清晰说明问题:
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
相关产品推荐
相关产品推荐

