PythonPodcast 38 - itnett/FTD02H-N GitHub Wiki
Python Mentorkurs – Episode 3: Objektorientert Programmering (OOP) og Klasser
Mentor: "Velkommen tilbake! I forrige episode lærte vi om funksjoner, moduler og filbehandling. Nå skal vi ta et stort steg fremover ved å utforske noe kraftig og utrolig nyttig i programmering – Objektorientert programmering, ofte kalt OOP. Dette er en metode for å strukturere koden din på en måte som etterligner hvordan virkelige objekter fungerer. La oss begynne med å bygge våre egne objekter!"
Hva er Objektorientert Programmering?
Mentor: "Objektorientert programmering handler om å skape objekter. Et objekt er en kombinasjon av data og funksjoner som kan brukes sammen. Tenk på et objekt som en virkelighetsnær representasjon av en ting. For eksempel kan et 'bil'-objekt ha attributter som farge, merke og hastighet, samt funksjoner som start(), stopp(), eller øk_fart()."
Hva er Klasser?
Mentor: "En klasse er en mal for å lage objekter. Hvis et objekt er en bil, så er klassen tegningen eller oppskriften for å lage den bilen. Når du lager et objekt fra en klasse, sier vi at vi 'instansierer' et objekt. La oss definere vår første klasse!"
class Bil: def init(self, merke, farge): self.merke = merke # Attributt for bilens merke self.farge = farge # Attributt for bilens farge
def kjør(self):
print(f"Den {self.farge} {self.merke} kjører.")
Mentor: "Her har vi laget en klasse kalt Bil. Klassen har to attributter, merke og farge, som definerer informasjon om bilen. Vi har også en funksjon, kjør(), som representerer en handling bilen kan gjøre."
Lage et Objekt (Instansiering)
Mentor: "Nå som vi har en klasse, kan vi bruke den til å lage et objekt – en spesifikk bil. Dette kalles instansiering. Slik gjør vi det:"
min_bil = Bil("Toyota", "rød") min_bil.kjør() # Skriver ut: Den røde Toyota kjører.
Mentor: "Her har vi laget et objekt kalt min_bil basert på Bil-klassen. Vi har gitt det merke 'Toyota' og fargen 'rød'. Deretter kaller vi funksjonen kjør() på dette objektet, og Python vet hvordan den skal kjøre basert på funksjonen i klassen."
init-Metoden
Mentor: "init-metoden er en spesiell funksjon som kjøres automatisk når et nytt objekt blir opprettet. Den setter opp objektets attributter, som for eksempel merke og farge i vårt bil-eksempel. Dette er viktig for å sikre at objektet har alt det trenger for å fungere fra starten av."
class Bil: def init(self, merke, farge): self.merke = merke # Bilens merke self.farge = farge # Bilens farge
Mentor: "Denne metoden sørger for at hver gang vi lager en ny bil, blir merket og fargen riktig satt opp."
Metoder i Klasser
Mentor: "En metode er en funksjon som er definert inne i en klasse og som fungerer på objektene laget fra denne klassen. Metoder kan forandre eller bruke objektets attributter. La oss legge til en metode som øker farten på bilen."
class Bil: def init(self, merke, farge): self.merke = merke self.farge = farge self.hastighet = 0 # Starter med hastighet 0
def kjør(self):
print(f"Den {self.farge} {self.merke} kjører.")
def øk_fart(self, økning):
self.hastighet += økning
print(f"Den {self.farge} {self.merke} øker farten til {self.hastighet} km/t.")
min_bil = Bil("Toyota", "rød") min_bil.kjør() min_bil.øk_fart(20) # Skriver ut: Den røde Toyota øker farten til 20 km/t.
Mentor: "Nå kan vi ikke bare kjøre bilen, men også øke hastigheten ved å kalle metoden øk_fart(). Dette gjør koden vår mer interaktiv og realistisk!"
Arv – Klasser som Arver Attributter
Mentor: "En av de mest kraftfulle egenskapene til OOP er arv. Dette betyr at en klasse kan arve attributter og metoder fra en annen klasse. Hvis vi har en klasse Bil, kan vi lage en ny klasse kalt ElBil som arver fra Bil, men legger til sin egen funksjonalitet."
class ElBil(Bil): def lad_op(self): print(f"Den {self.farge} {self.merke} lader opp.")
min_elbil = ElBil("Tesla", "blå") min_elbil.kjør() min_elbil.øk_fart(30) min_elbil.lad_op() # Skriver ut: Den blå Tesla lader opp.
Mentor: "Nå har vi en ElBil som arver alt fra Bil, men har sin egen spesielle metode, lad_op(). Dette er supernyttig for å unngå å skrive den samme koden flere ganger!"
Innkapsling – Beskytte Data
Mentor: "Innkapsling handler om å beskytte data i et objekt slik at de ikke kan endres direkte utenfor klassen. For eksempel kan vi gjøre hastighet privat ved å bruke to understreker, slik at vi kun kan endre hastigheten gjennom metodene vi har definert."
class Bil: def init(self, merke, farge): self.merke = merke self.farge = farge self.__hastighet = 0 # Privat variabel
def øk_fart(self, økning):
self.__hastighet += økning
print(f"Den {self.farge} {self.merke} øker farten til {self.__hastighet} km/t.")
Mentor: "Ved å bruke to understreker før hastighet, skjuler vi variabelen slik at den kun kan endres via metodene i klassen. Dette gir oss bedre kontroll over hvordan data blir endret i objektet."
Oppsummering
Mentor: "I denne episoden har vi dekket noen veldig viktige konsepter innen objektorientert programmering. Vi har sett på hvordan du kan lage dine egne klasser og objekter, hvordan metoder fungerer, og hvordan du kan bruke arv til å gjenbruke kode på en elegant måte. Vi har også lært om innkapsling for å beskytte data i objekter."
Praktisk Oppgave: Lag Din Egen Klasse
Mentor: "Nå er det din tur! Lag en klasse som representerer et 'Brettspill'. Klassen skal ha attributter som 'navn', 'antall spillere', og en metode som 'start_spill()'. Lag også en underklasse for 'Sjakk', og legg til en metode som heter 'flytt_brikke()'."
Mentor: "I neste episode skal vi utforske feilhåndtering og debugging. Det er en veldig viktig del av programmering – for selv om vi gjør feil, er det måten vi håndterer dem på som virkelig teller!"
Dette kurset har nå introdusert objektorientert programmering på en enkel og forståelig måte. Gjennom konkrete eksempler og praktiske oppgaver blir deltageren oppmuntret til å eksperimentere med OOP i Python.