在子类的另一个方法中调用超类的方法

问题描述

我已经问过有关我正在开发的游戏的问题。问题是在开发过程中发生的,但实际上与自身的游戏无关。

我的代码中有一个方法(子类中的“调整大小”),该方法在其超类(超类的“调整大小”)中调用等效方法

  • 预期的行为:调整大小的调用Super-do_rotozoom
  • 发生了什么:称为Sub-do_rotozoom的超大尺寸

这是一个代码示例:

子类:

def do_rotozoom(self):
    # do rotozoom stuff of subclass
def resize(self,factor):
    super().resize(factor)
    self.do_rotozoom()

超类:

def do_rotozoom(self):
    #do rotozoom stuff of superclass
def resize(self,factor):
    self.factor = factor
    self.do_rotozoom()

我找到了一种解决方法,其中涉及在子类方法super().do_rotozoom()调用do_rotozoom(),然后由super().resize()进行调用。我还发现,在这种情况下,我可以删除self.do_rotozoom()

在这种情况下,这很容易解决,但是在更复杂的情况下,例如,如果我需要使用超类中的其他变量调用方法do_rotozoom(),而不是在子类/另一个特定的实现?换句话说,如何在特定的上下文中选择要使用的方法

通常,您只能从子类中访问超方法,但不能从超类中获得超方法(不是它的超类,而是它自己的方法)。

我没有找到更好的标题...:D

解决方法

与继承相比,开发人员更倾向于使用Composition,它更易于管理。

我建议您做的是在子类中包含超类的实例,并在需要时使用它。

,

子类的确切定义是,它继承了超类 所覆盖的方法和属性的所有内容。

子类可以使用white-space: pre-wrap; word-wrap: break-word; 引用其超类及其方法实现,就像您在示例中所做的一样。

要么不重写super(),要么用do_rotozoom引用超类方法,这就是您需要的行为。