Du bruker arv der det egentlig er komposisjon
Handler om: Arv (er-en), Komposisjon (har-en)
Det er lett å gripe til arv så snart to klasser henger sammen. Men arv passer bare når den ene ER EN av den andre. Hvis den ene heller HAR den andre, er det komposisjon. En spilleliste er ikke en sang — den har mange sanger.
Eksempel
Du lar Spilleliste arve fra Sang fordi «de hører sammen», i stedet for å la Spilleliste ha en liste med sanger.
Slik tenker du riktig om det
Bruk er-en-testen: sett «ER EN» mellom klassene og les høyt. Klinger det feil, prøv «HAR». Klinger «HAR» riktig, er det komposisjon (en liste inni objektet), ikke arv.
Slik ser det ut i kode
Slik gikk det galt
class Spilleliste(Sang): # «er-en»? Nei!
... # en spilleliste ER IKKE en sang Slik fikser du det
class Spilleliste: # «har-en» -> komposisjon
def __init__(self, navn):
self.sanger = [] # HAR mange sanger