Seite 1 von 1

Vererbung [Python]

Verfasst: Samstag 16. Januar 2016, 00:31
von flooojava
Servus,

ich erbe derzeit von einer Vaterklasse, welche folgendermaßen aufgebaut ist:

Code: Alles auswählen

class Player(pygame.sprite.Sprite):
    sprites_left = []


 def __init__(self,bild):
        pygame.sprite.Sprite.__init__(self)
        self.sprites_left.append(bild)



class A(Player,pygame.sprite.Sprite):
 def __init__(self,bild1):
       Player.__init__(self,bild1))
 def output(self):
       #obligatorische Ausgabe:
       print(self.sprites_left[0])

class B(Player,pygame.sprite.Sprite):
 def __init__(self,bild2):
       Player.__init__(self,bild2))
  def output(self):
       #obligatorische Ausgabe:
       print(self.sprites_left[0])
       
a = A()
b = B()
a.output()
b.output()

Das ganze ist natürlich rein obligatorisch geschrieben, aber das Problem sollte ersichtlich sein.

Weshalb überschreibt b = B() denn das Bild von A? Hat das hier bei Sprites etwas mit Referenzen zu tun? Wieso ist dies nicht komplett unabhängig voneinander? Ich erbe jeweils von beiden Klassen (A,B) von meiner Hauptklasse Player und würde gerne die Sprites in der Hautpklasse erstellen, sodass ich keinen doppelten Code in class A und class B habe, jedoch überschreibt die letzte Initialisierung (hier b=B() ) die vorangegangene Initialisierung a=A()) - Weshalb aber?

Lg

Re: Vererbung [Python]

Verfasst: Samstag 16. Januar 2016, 01:04
von BlackJack
@flooojava: Da wird nichts überschrieben. Beide Aufrufe hängen ihr Bild an die *selbe* Liste. Und von der gibst Du dann zweimal das erste Element aus. Wenn Du etwas pro Exemplar haben willst, darfst Du halt keine Klassenattribute verwenden sondern musst auch für jedes Exemplar eine neue Liste erstellen:

Code: Alles auswählen

class Player(pygame.sprite.Sprite):

    def __init__(self, image):
        pygame.sprite.Sprite.__init__(self)
        self.sprites_left = [image]