Python_Essentials_21 - itnett/FTD02H-N GitHub Wiki
🐍 Objektorientert Programmering i Python (OOP)
Velkommen til den neste fasen av Python-opplæringen! Objektorientert programmering (OOP) er en sentral del av moderne programmering. I denne delen skal vi lære hvordan OOP fungerer i Python. Vi vil dekke konsepter som klasser, objekter, arv, og polymorfisme.
📚 Hva er Objektorientert Programmering?
Objektorientert programmering er en programmeringsmodell som er basert på konseptet av objekter. Objekter kan representere virkelige eller abstrakte ting. Hvert objekt har:
- Egenskaper (state/attributter), og
- Metoder (oppførsel/funksjoner).
Eksempel på objekter i virkeligheten:
- En bil kan være et objekt. Den har egenskaper som modell, farge, hastighet, og metoder som å akselerere, bremse.
- En hund kan også være et objekt. Den har egenskaper som rase, alder, navn, og metoder som å bjeffe, spise, løpe.
🔧 Klasser og Objekter i Python
I Python starter OOP med å definere klasser. En klasse er en mal eller "blueprint" for å lage objekter. Når du lager et objekt, kalles dette å instansiere en klasse.
Definere en Klasse 📦
La oss definere en enkel klasse i Python:
class Hund:
def __init__(self, navn, alder):
self.navn = navn
self.alder = alder
def bjeff(self):
print(f"{self.navn} sier voff!")
💡 Her har vi definert en klasse Hund
med to egenskaper: navn
og alder
, og én metode bjeff
.
Lage et Objekt 🐕
Nå kan vi bruke denne klassen til å lage et objekt (en faktisk hund!):
min_hund = Hund("Luna", 3)
min_hund.bjeff() # Output: Luna sier voff!
💡 Viktige Begreper:
__init__
-metoden: Dette er en spesiell metode som kalles en konstruktør. Den brukes til å initialisere (gi verdier til) objektets egenskaper når objektet opprettes.self
: Dette refererer til det nåværende objektet. Det brukes for å få tilgang til objektets variabler og metoder.
🛠️ Arv i Python (Inheritance)
Arv gjør det mulig å lage en ny klasse basert på en eksisterende klasse. Den nye klassen (underklassen) arver alle egenskapene og metodene fra den eksisterende klassen (overklassen).
Eksempel på Arv:
class Dyr:
def __init__(self, navn):
self.navn = navn
def lag_lyd(self):
print("Dyr lager lyd.")
# Hund arver fra Dyr
class Hund(Dyr):
def lag_lyd(self):
print(f"{self.navn} sier voff!")
min_hund = Hund("Luna")
min_hund.lag_lyd() # Output: Luna sier voff!
- Arv tillater oss å gjenbruke kode, og vi kan også overstyre (override) metoder i underklassen, som vi ser med
lag_lyd()
.
🎨 Polymorfisme
Polymorfisme lar objekter fra ulike klasser bruke samme metode på forskjellige måter. I eksempelet under har både Hund
og Katt
en metode lag_lyd
, men de gir forskjellige resultater.
Eksempel på Polymorfisme:
class Katt(Dyr):
def lag_lyd(self):
print(f"{self.navn} sier mjau!")
min_hund = Hund("Luna")
min_katt = Katt("Milo")
for dyr in (min_hund, min_katt):
dyr.lag_lyd()
# Output:
# Luna sier voff!
# Milo sier mjau!
Her ser vi at både Hund
og Katt
har sin egen implementasjon av lag_lyd
selv om de begge arver fra Dyr
.
🧰 Enkapsulering
Enkapsulering betyr at data (egenskaper) og metoder pakkes sammen i én enhet, som gjør det mulig å beskytte og kontrollere tilgangen til dataene.
Private Egenskaper 👮♂️
I Python kan vi gjøre en egenskap privat ved å bruke dobbelt underscore (__
).
💡 Eksempel:
class BankKonto:
def __init__(self, saldo):
self.__saldo = saldo # Privat egenskap
def sett_inn(self, beløp):
self.__saldo += beløp
def vis_saldo(self):
return self.__saldo
konto = BankKonto(1000)
konto.sett_inn(500)
print(konto.vis_saldo()) # Output: 1500
- Her er
__saldo
en privat variabel som ikke kan nås direkte utenfor klassen, men den kan endres gjennom metodenesett_inn
ogvis_saldo
.
👨🏫 Oppgaver
1. Opprett en Bil-klasse:
Lag en klasse Bil
med egenskaper som merke
, modell
, og farge
. Legg til metoder som start_motor
og stopp_motor
.
💡 Eksempel:
class Bil:
def __init__(self, merke, modell, farge):
self.merke = merke
self.modell = modell
self.farge = farge
def start_motor(self):
print(f"{self.merke} motoren er startet!")
def stopp_motor(self):
print(f"{self.merke} motoren er stoppet!")
min_bil = Bil("Toyota", "Corolla", "rød")
min_bil.start_motor() # Output: Toyota motoren er startet!
min_bil.stopp_motor() # Output: Toyota motoren er stoppet!
2. Bruk Arv:
Lag en underklasse ElBil
som arver fra Bil
og har en ekstra metode som heter lad_batteri
.
3. Polymorfisme:
Lag flere dyreklasser som Katt
, Fugl
og Ku
, alle med en metode lag_lyd
som gir ulike utdata.
🎯 Oppsummering
- Klasser og objekter lar deg strukturere koden i logiske enheter.
- Arv gjenbruker og utvider eksisterende klasser, noe som gir kodegjenbruk og fleksibilitet.
- Polymorfisme tillater bruk av samme metode på forskjellige klasser, noe som forenkler koden.
- Enkapsulering beskytter data og kontrollerer tilgang til dem gjennom metoder.
🔗 Forrige side: Dekoratører, Iteratorer og Regex | Neste side: Feilhåndtering i Python →
Lykke til med Python-koding! Fortsett å utforske OOP for å lage kraftige og velstrukturerte applikasjoner! 🐍✨