Du tror polymorfi krever en felles superklasse

Handler om: Polymorfi, Arv (er-en)

Polymorfi i Python handler om at objektene *svarer på det samme kallet*, ikke om hvor de stammer fra. Har både `Spiller` og `Fiende` en `tegn(skjerm)`, kan samme løkke tegne begge — uten at de arver fra noe felles. Python spør ikke etter stamtavlen, bare om metoden finnes (duck-typing).

Eksempel

Du lager en tom superklasse bare for å få en for-løkke til å kalle `flytt()` på alt i lista, selv om alle klassene allerede har metoden.

Slik tenker du riktig om det

Arv sier «er en»; polymorfi spør bare «kan du dette?». Sjekk om koden bruker superklassen til noe annet enn å binde klassene sammen — gjør den ikke det, trengs den ikke.

Slik ser det ut i kode

Slik gikk det galt

class Figur:           # tom, bare for å binde dem sammen
    pass

class Spiller(Figur):
    def tegn(self, skjerm): ...

Slik fikser du det

class Spiller:
    def tegn(self, skjerm): ...

class Fiende:
    def tegn(self, skjerm): ...

for f in figurer:      # virker: begge HAR tegn()
    f.tegn(skjerm)

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala