问题描述
我已经问过有关我正在开发的游戏的问题。问题是在开发过程中发生的,但实际上与自身的游戏无关。
我的代码中有一个方法(子类中的“调整大小”),该方法在其超类(超类的“调整大小”)中调用等效方法。
- 预期的行为:调整大小的调用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
引用超类方法,这就是您需要的行为。