Klassearv

Når man lager klasser er ofte oppdeling i superklasser og underklasser å foretrekke fordi dette gjør logikken klarere.

Et eksempel på en ganske generell klasse:

class Motorsykkel():

   def __init__(selv, navn, kubikk, årsmodell, farge, produsent):
      selv.navn = navn
      selv.kubikk = kubikk
      selv.årsmodell = årsmodell
      selv.farge = farge
      selv.produsent = produsent

   def hentBeskrivelse(selv):
      return selv.navn + " " + str(selv.kubikk) + " " + str(selv.årsmodell) + ", produsert av " + selv.produsent + ", " + selv.farge

Denne klassen gjør ikke så mye enda, det eneste som foregår er oppbevaring av data som også kan hentes ut igjen i form av en beskrivelse.

Eksempel på bruk av klassen over:

motorsykkel = Motorsykkel("GSX F", 600, 1995, "svart og oransje", "Suzuki")

motorsykkel.hentBeskrivelse()
# gir:
# "GSX F 600 1995, produsert av Suzuki, svart og oransje"

Her opprettes et objekt av typen Motorsykkel som gis en rekke data.

Etterpå hentes beskrivelsen.

Eksempel på en underklasse som arver fra klassen øverst, hvor denne dermed blir til en superklasse:

class TohjulsMotorsykkel(Motorsykkel):

   def __init__(selv, navn, kubikk, årsmodell, farge, produsent, type):
      super().__init__(navn, kubikk, årsmodell, farge, produsent)
      selv.type = type

   def hentBeskrivelse(selv):
      return super().hentBeskrivelse() + ", type " + selv.type

Her tar man i mot de samme dataene som i superklassen, hvor disse videresendes for å klargjøre denne delen først.

Til slutt angir man en ny definisjon av metoden hentBeskrivelse så denne gir en mer utfyllende beskrivelse.

Eksempel på bruk av underklassen over:

minMotorsykkel = TohjulsMotorsykkel("GSX F", 600, 1995, "svart og oransje", "Suzuki", "sportstouring")

minMotorsykkel.hentBeskrivelse()
# gir:
# "GSX F 600 1995, produsert av Suzuki, svart og oransje, type sportstouring"

Her inneholder beskrivelsen det nye feltet type.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *