Göm meny

Kom igång med klasser, objekt, instansvariabler och metoder


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: Jody Foo
Senast uppdaterad: 2019-10-25