Python,覆盖父函数

时间:2014-06-02 22:12:19

标签: python function class override parent

我在这里以及其他网站上阅读了一些关于如何覆盖功能的内容,但它们都不符合我的需求。

我只需要更改一行代码,因此使用super(Class, self).function(parameter)似乎没有帮助。我可能完全错了。

无论如何,这是父母:

class Platformer(Entity):
    def __init__(self, color, width, height, x, y):
        Entity.__init__(self)
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([width, height])
        self.image.fill(color)

        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

        self.xvel = 0
        self.yvel = 0
        self.onGround = False

    def update(self, up, down, left, right, platforms):
        if up:
            if self.onGround:
                self.yvel -= 8
                bounceSound.play()
        if down:
            self.yvel += 5
        if left:
            self.xvel = -3
        if right:
            self.xvel = 3
        if not self.onGround:
            self.yvel += 0.5
            if self.yvel > 15:
                self.yvel = 15
        if not(left or right):
            if self.onGround:
                self.xvel = 0

        self.rect.left += self.xvel
        self.collide(self.xvel, 0, platforms)
        self.rect.top += self.yvel
         self.onGround = False
        self.collide(0, self.yvel, platforms)

    def collide(self, xvel, yvel, plats):
        for p in platforms:
                if sprite.collide_rect(self, p) and isinstance(p, Block):
                    if xvel > 0:
                        self.rect.right = p.rect.left
                    if xvel < 0:
                        self.rect.left = p.rect.right
                    if yvel > 0:
                        self.rect.bottom = p.rect.top
                        self.onGround = True
                        self.yvel = 0
                    if yvel < 0:
                        self.rect.top = p.rect.bottom
                        self.yvel = 0

这就是我写的那个孩子:

class Bird(Platformer):

    def update(self, up, down, left, right, platforms):
        if up:
            self.yvel -= 8
        if down:
            self.yvel += 5
        if left:
            self.xvel = -3
        if right:
            self.xvel = 3
        if not self.onGround:
            self.yvel += 0.5
            if self.yvel > 15:
                self.yvel = 15
        if not(left or right):
            if self.onGround:
                self.xvel = 0

请注意,我想要更改的是if“up”部分中的update语句。 在运行程序时,一切正常(鸟在需要的地方绘制,正确的颜色等),但更新不起作用。

有人可以帮我理解这个吗?我真的找不到合适的语法。

1 个答案:

答案 0 :(得分:0)

我会改变结构如下:

在父级中添加额外参数parentBehaviour

def update(self, up, down, left, right, platforms, parentBehaviour=True):
    if up:
        if parentBehaviour and self.onGround:
            self.yvel -= 8
            bounceSound.play()
    #rest of method...

在孩子身上:

def update(self, up, down, left, right, platforms):
    super(Bird, self).update(up, down, left, right, platforms, False)
    #end method

此结构的原因通常是您通常希望避免复制您的代码。请参阅Wikipedia了解DRY principle