Klasser i Python
Indhold på denne side
Hvad er en klasse?
Python er et objektorienteret programmeringssprog. Et objekt refererer til en kollektion af data, og metoder som interagerer med dataene. Et objektorienteret programmeringssprog betyder, at sproget er opbygget på en måde så koden er opdelt i grupper, som hvert er ansvarlig for en del af programmets funktionalitet. Disse grupper kaldes klasser. Ligesom med funktioner, kan klasser genanvendes til senere brug flere steder i programmet, eller i andre programmer. En klasse kan siges at være en arbejdstegning, som gør noget bestemt med den data og de funktioner, som den bliver givet. Det færdige resultat af klassen er objektet. En klasse kan benyttes til at skabe flere forskellige objekter. Hver gang man skaber et objekt ud fra en klasse kaldes det en instantiation.
Hvordan definerer man en klasse?
I Python kan man definere en klasse med erklæringen class efterfulgt af klassens navn og et kolon. Alt det som klassen indeholder skal indrykkes. En klasse kan skabes på følgende måde:
class Hunde: pass
Denne klasse har navnet Hunde.
Bemærk, at erklæringen pass kun er indsat så koden ikke indlæser en fejlmeddelelse.
__init__
Inde i en klasse er det påkrævet at man definerer en funktion ved navn __init__. Nogle funktioner, som __init__, starter og slutter med to bundstreger, da de har en speciel betydning for programmet. init står for initialize som er at igangsætte. Denne funktion benyttes til at igangsætte klassen. __init__ kræver som minimum ét parameter der skal hedde self, som definerer at klassen bliver skabt:
class Hunde: def __init__(self):
Oftest indsætter man flere parametre end self inde i funktionen for at tilpasse klassen efter behov. Disse parametre kaldes attributter. I nedenstående eksempel indsættes et parameter som hedder navn og et parameter som hedder alder. I denne klasse vil vi gerne lave en instantiation af en hund, så disse to parametre skal beskrive hundens navn og alder. Vi lader funktionen vide, at navn refererer til klassens navn ved at sige at self.navn attributten er lig med variablen navn og at alder refererer til klassens alder ved at sige at self.alder attributten er lig med variablen alder:
class Hunde: def __init__(self, navn, alder): self.navn = navn self.alder = alder
Bemærk, at man også kan lave en standardværdi for et parameter inde i __init__ funktionen, så den vil gælde for alle de gange man benytter parameteret. F.eks. kunne man skrive self.alder = 0, som gør at standardværdien for alder er 0.
Klassens funktioner
Inde i klassen kan man definere andre funktioner udover __init__ efter behov. Disse funktioner kan man kalde hvad man vil, men de skal mindst have ét parameter som er self, da det vil give funktionen adgang til klassens attributter.
I nedenstående klasse defineres funktionen Hent_bold. Når funktionen hidkaldes så vil programmet udprinte at hunden henter sin bold. Funktionen har parameteret self:
class Hunde: def __init__(self, navn, alder): self.navn = navn self.alder = alder def Hent_bold(self): print(self.navn + ' henter bolden.')
Instantiation af en klasse
Når man definerer en klasse, så kan man hidkalde klassen med dens navn og de parametre som man vil benytte. I nedenstående eksempel defineres variablen Hund_1 som sættes lig med klassen Hunde. Klassen har to parametre (udover self), så derfor skrives der to værdier mellem parenteserne som er hundens navn og hundens alder:
class Hunde:
def __init__(self, navn, alder):
self.navn = navn
self.alder = alder
def Hent_bold(self):
print(self.navn + ' henter bolden.')
Hund_1 = Hunde('Buster', 8)
Nu er der blevet skabt en instans af klassen Hunde, som hedder Hund_1. Man kan skabe ligeså mange instanser af den samme klasse som man har behov for.
Nu kan man udprinte hundens navn og alder ved at indtaste Hund_1 og sætte navn eller alder efter et punktum, da det er klassens to attributter:
print(Hund_1.navn)
print(Hund_1.alder)
Ovenstående kodestykke vil indlæse følgende:
Buster
8
Funktionen Hent_bold kan hidkaldes med den instantiation som er blevet skabt:
Hund_1.Hent_bold()
Det kodestykke vil indlæse følgende:
Buster henter bolden.