Python 精灵从其组继承属性的最干净方式?

Python 精灵从其组继承属性的最干净方式?,python,pygame,Python,Pygame,具体来说,我希望sg_fireball中的每一个精灵都有“反弹”,而不是从Spell()中给每一个精灵“反弹”。有没有一种干净的方法可以做到这一点,而不用将“反弹”作为Spell()的参数,或者通过sg_fireball循环 相关代码片段: self.sg_fireball = pygame.sprite.Group() self.sg_fireball.speed = 6.0 self.sg_fireball.image = pygame.image.load("fireball.png")

具体来说,我希望sg_fireball中的每一个精灵都有“反弹”,而不是从Spell()中给每一个精灵“反弹”。有没有一种干净的方法可以做到这一点,而不用将“反弹”作为Spell()的参数,或者通过sg_fireball循环

相关代码片段:

self.sg_fireball = pygame.sprite.Group()
self.sg_fireball.speed = 6.0
self.sg_fireball.image = pygame.image.load("fireball.png")
self.sg_fireball.bounces = 1

if event.type == pygame.MOUSEBUTTONDOWN:
    self.character.cast(self.sg_fireball)

def cast(self, sg):
    sg.add(Spell(self.rect.center, sg.speed, self.dir, sg.image))

class Spell(pygame.sprite.Sprite):
    def __init__(self,pos, speed, direction, img, bounces):
        pygame.sprite.Sprite.__init__(self)
        self.bounces = bounces
        self.image = img
        self.rect = pygame.Rect(pos, (8,8))
        self.posx = self.rect.x
        self.posy = self.rect.y
        self.speed = speed
        self.dir = direction
        self.velx = self.speed*math.cos(self.dir)
        self.vely = self.speed*math.sin(self.dir)

如果我理解正确,您希望某些精灵具有某种属性,而其他精灵则不具有。这是多态性和继承的完美例子。 这是您可以执行的选项之一:

  • 你将一个普通法术归类为弹跳法术。然后,您可以使用另一个更新函数来处理反弹。您通常可以在与NormalSpell相同的精灵组中添加BounchySpell

  • 这让我找到了正确的方向,谢谢。最终生成一个从Spell派生的类并调用该子类,使用组中定义的属性而不是参数。