是否可以将继承实现为影响子类中的方法?

时间:2016-01-22 20:30:43

标签: python python-2.7 inheritance pygame

我目前正在开发一个pygame游戏。有两个班。一个是弥撒,另一个是Ball。 Ball是Mass的子类。

我创建的每个对象都将继承自Mass。它是一个基类。在我创建的对象中,我设计了move方法来实现引力。但我想要完成的是在Mass类中提供这种重力(基本上是方法中定义的负加速度值)。因此,请在所有move方法中对此进行编码,以避免重复。

我应该在move中定义另一个Mass方法。是子类'方法覆盖它?到目前为止,我试图找到解决方案的努力都失败了。所以我并没有要求你为我编写代码,如果你能指出我正确的方向,我可以请求,也许告诉我应该探索什么,我将不胜感激。

class Mass(object):
    # The base class

class Ball(Mass):

    def __init__(self, surface, radius, color, starting_pos):
        self.radius = radius
        self.color = color
        self.starting_pos = starting_pos
        self.surface = surface

    def move(self):
        # Keyboard handlers

    def draw(self):
        pygame.draw.circle(self.surface, self.color, (self.starting_pos), self.radius )   

2 个答案:

答案 0 :(得分:2)

是的,在覆盖它的子类中对move()的调用默认情况下不会调用Mass'一。您仍然可以通过它的子类实现内部显式调用父方法。

class Ball(Mass):
  #...
  def move(self):
    Mass.move(self)
    #...

当您致电ballInstance.move()时,您在此处所做的只是获取未绑定的Mass.move方法并使用Ball实例ballInstance调用它。这是查看显式self参数的好方法。

答案 1 :(得分:2)

如果在所有Mass对象之间共享引力,为什么它不是一个类属性?您也可以从子类调用Mass.move

class Mass(object):
    gravity = -9.8
    def move(self):
       #generic movement
    # The base class

class Ball(Mass):
    ...
    def move(self):
        Mass.move(self)#run the one defined in Mass
        #then do anything extra
        print(self.gravity)

这样,常量在所有对象之间共享,并且任何子类仍然可以依赖于Mass中的公共代码。