我目前正在开发一个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 )
答案 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中的公共代码。