在 subclass 的另一个方法中调用 super class 的方法
Call the method of the super class in an other method of the subclass
我已经询问过与我正在开发的游戏相关的问题。开发过程中出现的问题,其实与游戏本身无关
我的代码中有一个方法('resize' in a subclass)调用它的 super class 中的等效方法('resize' of the superclass).
- 预期行为:Super-resize 调用 Super-do_rotozoom
- 发生了什么:Super-resize 调用了 Sub-do_rotozoom
这是一个代码示例:
亚class:
def do_rotozoom(self):
# do rotozoom stuff of subclass
def resize(self,factor):
super().resize(factor)
self.do_rotozoom()
超级class:
def do_rotozoom(self):
#do rotozoom stuff of superclass
def resize(self,factor):
self.factor = factor
self.do_rotozoom()
我找到了一个变通方法,它涉及在 Subclass 方法 do_rotozoom()
中调用 super().do_rotozoom()
,然后由 super().resize()
调用该方法。我还发现,在这种情况下我可以删除行 self.do_rotozoom()
.
在这种情况下,这是一个非常简单的修复,但在更复杂的情况下我会怎么做,例如,如果我需要用 super[=51] 中的其他变量调用方法 do_rotozoom()
=]比我做的subclass/another具体实现?换句话说,我如何才能 select 我想在特定上下文中使用哪种方法?
通常你只能从子class到达super-methods,但不能从super-methods(不是它的超级class而是它自己的方法)超级class.
我还没有找到更好的标题...:D
开发人员更喜欢组合而不是继承,它更易于管理。
我建议你做的是在你的子类中包含一个超类的实例,并在你需要的时候使用它。
子类的定义是它继承超类的所有内容除了它覆盖的方法和属性。
子类可以使用 super()
引用其超类及其方法实现,就像您在示例中所做的那样。
要么不要覆盖 do_rotozoom
,要么使用 super().do_rotozoom()
引用超类方法,这是您需要的行为。
我已经询问过与我正在开发的游戏相关的问题。开发过程中出现的问题,其实与游戏本身无关
我的代码中有一个方法('resize' in a subclass)调用它的 super class 中的等效方法('resize' of the superclass).
- 预期行为:Super-resize 调用 Super-do_rotozoom
- 发生了什么:Super-resize 调用了 Sub-do_rotozoom
这是一个代码示例:
亚class:
def do_rotozoom(self):
# do rotozoom stuff of subclass
def resize(self,factor):
super().resize(factor)
self.do_rotozoom()
超级class:
def do_rotozoom(self):
#do rotozoom stuff of superclass
def resize(self,factor):
self.factor = factor
self.do_rotozoom()
我找到了一个变通方法,它涉及在 Subclass 方法 do_rotozoom()
中调用 super().do_rotozoom()
,然后由 super().resize()
调用该方法。我还发现,在这种情况下我可以删除行 self.do_rotozoom()
.
在这种情况下,这是一个非常简单的修复,但在更复杂的情况下我会怎么做,例如,如果我需要用 super[=51] 中的其他变量调用方法 do_rotozoom()
=]比我做的subclass/another具体实现?换句话说,我如何才能 select 我想在特定上下文中使用哪种方法?
通常你只能从子class到达super-methods,但不能从super-methods(不是它的超级class而是它自己的方法)超级class.
我还没有找到更好的标题...:D
开发人员更喜欢组合而不是继承,它更易于管理。
我建议你做的是在你的子类中包含一个超类的实例,并在你需要的时候使用它。
子类的定义是它继承超类的所有内容除了它覆盖的方法和属性。
子类可以使用 super()
引用其超类及其方法实现,就像您在示例中所做的那样。
要么不要覆盖 do_rotozoom
,要么使用 super().do_rotozoom()
引用超类方法,这是您需要的行为。