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

我已经询问了一些与我正在开发的游戏相关的问题。该问题是在开发过程中出现的,但实际上与游戏本身无关。

我的代码中有一个方法(子类中的“resize”),它调用其超类中的等效方法(超类的“resize”)。

  • 预期行为:超级调整大小调用 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


qq_遁去的一_1
浏览 103回答 2
2回答

杨魅力

开发人员往往更喜欢组合而不是继承,它更易于管理。我建议您做的就是在子类中包含超类的实例,并在需要时使用它。

不负相思意

子类的定义就是它继承了超类的所有内容,除了它重写的方法和属性之外。子类可以使用 引用其超类及其方法实现super(),就像您在示例中所做的那样。要么不要重写do_rotozoom,要么引用超类方法来super().do_rotozoom()实现您需要的行为。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python