Lär dig programmera med Python!

Back to All Courses

Lesson 7

Objekt och klasser

Vad är objekt?

Det som gör Python roligt och väldigt skalbart är det faktum att det är objektorienterat programmeringsspråk!

Ett objekt i Python kan beskrivas som en modul som har ett visst antal fördefinierade funktioner och/eller variabler.

  • Variabler som tillhör ett objekt kallas för attribut

  • Funktioner som tillhör ett objekt kallas för metoder

Vi har faktiskt redan sett några objekt i Python utan att tänka på det! Datatypen Dictionary är ett objekt till exempel, som bl.a. har metoden .keys() för att få ut alla nycklar som den innehåller.

>>> personInfo = {"Albert":"Stockholm","Johan":"Helsingborg"} # Vi skapar en dictionary
>>> personInfo.keys() # Vi anropar metoden keys()...

dict_keys(['Johan', 'Albert']) # ...och det här är vad Python returnerar

Klasser

För att skapa egna objekt måste man först skriva en klass. En klass är som en modell för de objekt som man ska skapa: det är här man berättar vilka attribut och metoder som objektet ska ha, och hur de interagerar med varandra.

För att lättare förstå detta kan vi ta ett enkelt exempel. Låt säga att vi driver en restaurang och vill hålla koll på våra maträtter genom ett enkelt Python-program (det är kanske inte särskilt troligt att man använder Python för något sådant, men men...).

Vi vill att alla våra maträtter ska vara objekt som ärver egenskaper från vår maträttsklass. Maträttsklassen innehåller följande information: namn, pris, och om rätten är vegetarisk eller ej. Vi börjar med att skapa ett nytt .py-dokument med vår klass:

class Matratt: # Klassnamn börjar alltid med en stor bokstav
    
   def __init__(self, namn, pris, veggo):
      self.namn     = namn  # en sträng
      self.pris     = pris  # en int
      self.veggo    = veggo # en bool

   def visaInfo(self): # En metod som skriver ut info om maträtten
      print("Namn: ", self.namn)
      print("Pris: ", self.pris, "kr")
      print("Vegetarisk? ", self.veggo)

Nu har vi en klass med två metoder (__init__ och visaInfo). Klassmetoder fungerar precis som vanliga funktioner, förutom att de även tar in ett första self-argument! När du anropar metoden behöver du dock inte tänka på att self finns (vilket du kommer att se i koden nedanför).

En sak som kan se lite konstig ut här är __init__-metoden – vad gör den egentligen?Init-metoden kallas även för konstruktormetoden. Det är den som anropas först när vi skapar en ny Maträttsinstans (ett nytt objekt), och som ser till att sätta objektets attribut utifrån de variabler som vi skickar med.Anledningen till att man döper dess variabler till self.namn, self.pris och self.veggo istället för bara namn, pris och veggo är för att göra det tydligt att det rör sig om klassattribut, och inte bara lokala variabler!Om vi nu vill skapa vår första maträtt kan vi köra ovanstående kod och sedan skriva det här i Python Shell:

>>> bolo = Matratt("Pasta bolognese", 80, False)

Nu är objektet lagrat! Vi kan närsomhelst under programkörningen anropa en av dess metoder, t.ex. visaInfo:

>>> bolo.visaInfo() # Tryck på Enter så skriver Python ut det som står nedan
Namn:  Pasta bolognese
Pris:  80 kr
Vegetarisk?  False

Det fungerar! Vi kan skapa hur många såna här objekt som helst nu med en enda kodrad, och sedan anropa metoderna som tillhör objektet!

Kom ihåg att det som gör klasser så användbara är att de är modulära och skalbara! Om vi i ett senare skede kommer på att vi även vill kunna visa maträttens pris exklusive moms, så kan vi göra det genom att snabbt lägga till en kodrad i maträttsklassen! Alla objekt som härstammar från den klassen kommer då att ärva den nya egenskapen.

Slutligen: var inte orolig om du blev väldigt förvirrad av det här kapitlet. Klasser kan ta ett tag att förstå, men ofta blir det hela tydligt efter att man börjar skriva egna program som använder sig av det!