Kom igång med klasser, objekt, instansvariabler och metoder
Innehåll
Nedan följer en kort guide till klasser, objekt, metoder och instansvariabler.
Skapa instans av en klass
För att skapa en instans av en klass använder vi klassens konstruktor.
Klassens konstruktor är en speciell metod som returnerar en instans av klassen.
Vi använder klassens konstruktor genom att skriva namnet på klassen följt av ()
.
En konstruktor kan vara definierad för att ta emot argument. Dessa argument används av konstruktorn när den nya instansen ska skapas.
Exempel
De inbyggda datatyperna är klasser. Nedan följer exempel där vi skapar en
instans av datatypen str
, dvs en sträng.
# skapa en tom sträng, dvs en instans av klassen str
tom_sträng = str()
I exemplet ovan använde vi namet på klassen följt av ett parentespar:str()
.
Detta är ett anrop till str
-klassens konstruktor som returnerar en instans
av klassen.
# skapa en sträng som innehåller tecknet för heltalet 50
sträng_med_heltal = str(50)
I exemplet ovan anropar vi str
-klassens konstruktor med ett argument.
Instansvariabler
Data hör ihop med ett objekt lagras i variabler inuti objektet. Dessa variabler
kallas för instansvariabler. För att komma åt dessa instansvariabler används
punktnotation: objekt.instansvariabel
.
Exempel
I Introuppgift 3 använde ni biblioteket requests
för att hämta information från webben.
Ni skrev då något i stil med detta:
import requests
r = requests.get('http://www.ida.liu.se/screen/pul_free.json')
Det som händer i koden ovan är att ett funktionsanrop till funktionen get()
i
modulen requests
görs, med en sträng som argument. Funktionen requests.get()
kommer att returnera en instans av klassen Response
.
Objekt av klassen Response
har en instansvariabel som innehåller den statuskod
som servern skickade tillbaka. Instansvariabeln har namnet status_code
och
för att komma åt den i exemplet ovan skriver vi r.status_code
, dvs instansvariabeln
status_code
som tillhör objektet r
.
Metoder
Metoder är funktioner definieras inuti en klass och som anropas via en instans av den klassen.
Syntaxen för att använda en metod är objekt.metodnamn()
. Ni har redan använt
metoder när ni använt er av .append()
på en lista:
namn = []
namn.append("Guido")
I exemplet ovan är namn
en instans av den inbyggda klassen list
och
namn.append("Guido")
anropar metoden .append()
med argumentet "Guido"
.
Klassdefinitioner
Nedan följer definitionen av en klass med namnet Square
.
class Square(object):
def __init__(self, w, h):
print("En instans av klassen Square skapas.")
self.width = w
self.height = h
def get_area(self):
return self.width * self.height
Argumentet self
Klassen innehåller två metod-definitioner. Som ni ser, så ser en metod-definition
precis ut som en funktionsdefinition, med undantaget att en metod-definition
alltid måste ta emot argumentet self
. När metoden anropas, kommer python att
skicka den instans som metoden hör ihop med i argumenet self
. Argumentet self
räknas alltså inte till de “synliga” argumenten när ett metodanrop görs.
Den speciella metoden __init__()
Metoden __init__()
som definierats i klassen Square
är en metod som körs
när en instans av klassen skapas. När man anropar konstruktorn till en klass,
körs __init__()
och de argument som skickas till konstruktorn kommer att tas
emot av metoden __init__()
.
Om vi skulle skapa en instans av klassen Square
:
fyrkant = Square(5, 4)
Så kommer metoden __init__()
att få de argument som skrivits inom parentesparet.
Instansvariablerna
Klassen Square
har två instansvariabler, width
och height
. I metoden
__init__()
sparas värdet i argumentet w
till instansvariabeln width
som
ligger inuti self
, dvs den instans som håller på att skapas. Värdet i h
sparas
till instansvariabeln height
, som också ligger i self
, dvs den instans som
håller på att skapas.
Metoddefinitionen för .get_area()
Metoder, dvs de funktioner som är bundna till en klass, definieras som funktioner,
fast inuti klassen. Alla metoddefinitioner måste ta emot argumentet self
.
När ett metodanrop görs, kommer python att automatiskt tillhandahålla den
instans som metodanropet gjorts på genom argumentet self
.
Det metoden get_area()
gör är att plocka fram värdena för instansvariablerna
.width
och .height
(som alltså finns lagrade i self
) genom att skriva
self.width
och self.height
.
Demonstration
Här är en trinket som demonstrerar exemplet ovan.
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2024-07-26