【问题标题】:Call the method of the super class in an other method of the subclass在子类的另一个方法中调用超类的方法
【发布时间】:2020-09-06 00:33:27
【问题描述】:

我已经询问了一些与我正在开发的游戏相关的问题。问题是在开发的时候出现的,其实和游戏本身没有关系。

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

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

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

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

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

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

【问题讨论】:

  • “方法”用一个“e”拼写。

标签: python subclassing


【解决方案1】:

开发人员更喜欢组合而不是继承,它更易于管理。

我建议你做的是在你的子类中包含你的超类的一个实例,并在你想要的时候使用它。

【讨论】:

  • 我知道组合,但我还处于计算机科学发展的初期,所以我对模式的使用不是很熟悉。你的观点我是对的,但我对我的情况没有帮助。
【解决方案2】:

子类的定义是它继承父类的所有内容除了它覆盖的方法和属性。

子类可以使用super() 引用其超类及其方法实现,就像您在示例中所做的那样。

要么不要覆盖do_rotozoom,要么使用super().do_rotozoom() 引用超类方法,这是您需要的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多