Programmering nivå 2
Kap 3.2 – Skapa klasser och objekt
Definiera egna klasser och skapa objekt som har egna attribut och metoder.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Kunna definiera egna klasser i Python.
- Förstå hur man skapar och använder objekt från en klass.
- Kunna använda konstruktorer och skapa metoder i en klass.
Så här lär du dig bäst
Börja med att läsa exemplen och försök förstå hur varje del fungerar. Kopiera koden och kör den själv. Gör sedan små ändringar och se vad som händer. Tänk på hur du kan använda egna klasser för att beskriva verkliga företeelser.
Centrala begrepp
Kap 3.1 förklarade begreppen. Här använder du dem praktiskt när du skriver egna klasser.
- Klass: en mall som beskriver hur ett objekt ska fungera.
- Objekt: en instans av en klass som skapas när programmet körs.
__init__(): klassens konstruktor, som körs när objektet skapas.self: referens till det aktuella objektet inom klassen.- Metod: en funktion som tillhör en klass och använder
self.
Du behöver förstå dessa begrepp för att kunna bygga program med flera objekt som samarbetar. De är grunden för det objektorienterade arbetssättet.
Arbetsgång: från idé till klass
När du skapar en egen klass kan du följa samma ordning nästan varje gång:
- Bestäm vad klassen ska representera, till exempel
BookellerPerson. - Bestäm vilka attribut varje objekt behöver ha.
- Skriv konstruktorn
__init__()och spara attributen medself. - Lägg till metoder som beskriver vad objektet kan göra.
- Skapa ett eller flera objekt och testa metoderna.
Skapa och använda klasser
I Python definierar du en klass med nyckelordet class. Här är ett enkelt exempel på en
klass som representerar en bok:
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def print_info(self):
print(f"{self.title} av {self.author}")
Här definieras två attribut, title och author, samt en metod
print_info(). För att använda klassen skapar du ett objekt:
book1 = Book("1984", "George Orwell")
book1.print_info()
Detta skapar ett nytt objekt, book1, av typen Book. När du anropar metoden
print_info() använder objektet sina egna attribut.
Flera objekt från samma klass
En viktig poäng med klasser är att samma klass kan skapa flera objekt. Objekten har samma struktur, men egna värden.
book1 = Book("1984", "George Orwell")
book2 = Book("The Martian", "Andy Weir")
book1.print_info()
book2.print_info()
Båda objekten är skapade från klassen Book, men book1 och
book2 har olika värden i title och author.
Ändra ett attribut
Efter att ett objekt har skapats kan du ändra ett attribut med punktnotation.
book1.title = "Animal Farm"
book1.print_info()
Det här ändrar bara book1. Andra objekt som skapats från samma klass påverkas inte.
Öva: skapa en egen klass
Skriv en klass som heter Person. Den ska ha attributen name och
age, och en metod som skriver ut:
Hej, jag heter [namn] och är [ålder] år.
Tips:
- Börja med att skriva
class Person: - Lägg till en
__init__-metod medself,nameochage. - Lägg till en metod
say_hello()som skriver ut informationen. - Skapa två olika objekt, till exempel
person1ochperson2. - Testa att ändra åldern på ett av objekten efter att det skapats.
Interaktiv övning: skapa ett Person-objekt
Fyll i namn och ålder. Tryck först på Skapa objekt för att simulera
person1 = Person(name, age). Kör sedan metoden say_hello().
Programmering 2-koppling: __init__ sparar
värdena i objektet, och metoden använder sedan self.name och self.age
för utskriften.
Öva själv
Övning 1: Skapa en person
Skapa klassen Person med attributen name och age. Lägg till
metoden say_hello(), som presenterar personen. Skapa ett objekt och anropa metoden.
Kontrollera programmet
- Konstruktorn ska ta emot namn och ålder.
- Värdena ska sparas som attribut med
self. - Metoden ska använda objektets egna attribut.
Fundera: När körs __init__()?
När du har försökt själv: visa lösningsförslaget till övning 1 på GitHub.
Övning 2: Två oberoende spelkaraktärer
Skapa klassen Spelkaraktar med attributen namn och liv samt
metoden visa_status(). Skapa två objekt med olika värden. Ändra sedan
liv direkt med punktnotation på det ena objektet och visa båda objektens status igen.
Kontrollera programmet
- Båda objekten ska skapas från samma klass.
- Endast det valda objektets liv ska ändras.
- Metoden ska fungera på båda objekten.
Fundera: Varför påverkas inte det andra objektet när det första ändras?
När du har försökt själv: visa lösningsförslaget till övning 2 på GitHub.
Övning 3: Bilens mätarställning
Skapa klassen Bil med attributen modell och kilometer. Lägg
till metoden kor(stracka), som ökar bilens mätarställning med den angivna sträckan,
och metoden visa_info(). Kör bilen två sträckor och visa resultatet.
Testa programmet genom att
- skapa en bil med en mätarställning större än
0. - anropa
kor()med två olika sträckor. - kontrollera att båda sträckorna har lagts till.
Fundera: Vad är parameter och vad är argument när
kor() används?
När du har försökt själv: visa lösningsförslaget till övning 3 på GitHub.
Övning 4: Bok med utlåningsstatus
Skapa klassen Book med attributen title, author och
is_borrowed. När ett objekt skapas ska is_borrowed vara
False. Lägg till metoderna borrow(), som ändrar värdet till
True, och print_info(), som skriver ut bokens uppgifter och status.
Kontrollera programmet
- Skapa två böcker och låna bara den ena.
- Den lånade boken ska visa att den är utlånad.
- Den andra bokens status ska fortfarande vara ledig.
Fundera: Varför behöver is_borrowed inte
vara en parameter i konstruktorn?
När du har försökt själv: visa lösningsförslaget till övning 4 på GitHub.
Övning 5: Sök bland kontaktobjekt
Svårare övning: Här kombinerar du klasser och objekt med en lista, funktioner och linjär sökning.
Skapa klassen Kontakt med attributen namn och telefon samt
metoden visa_info(). Skapa minst fyra kontaktobjekt och lägg dem i en lista. Skriv
funktionen hitta_kontakt(kontakter, soknamn), som returnerar objektet med rätt namn.
Om kontakten saknas ska funktionen returnera None.
Testa funktionen med
- namnet på den första kontakten.
- namnet på den sista kontakten.
- ett namn som inte finns.
Fundera: Vad returneras: kontaktens namn eller hela kontaktobjektet?
När du har försökt själv: visa lösningsförslaget till övning 5 på GitHub.
Övning 6: Varukorg med objekt
Svårare övning: Här kombinerar du klasser och flera objekt med lista, funktioner, loopar och beräkningar.
Skapa klassen Vara med attributen namn, pris och
antal. Lägg till metoden berakna_summa(), som returnerar varans pris
multiplicerat med antalet, och metoden visa_info(). Skapa minst tre varuobjekt och
lägg dem i en lista. Skriv funktionen berakna_total(varukorg), som returnerar hela
varukorgens kostnad.
Kontrollera programmet
- Varje vara ska kunna beräkna sin egen summa.
- Alla varor och deras summor ska skrivas ut.
- Totalen ska ändras om du ändrar antalet på ett av objekten.
- En tom varukorg ska ge totalen
0.
Fundera: Vilken beräkning hör till objektet och vilken beräkning behöver hela listan?
När du har försökt själv: visa lösningsförslaget till övning 6 på GitHub.
Sammanfattning
- En klass i Python skapas med
classoch innehåller metoder och attribut. __init__används för att sätta upp objektets startvärden.selfanvänds för att referera till objektet självt.- Du skapar ett objekt genom att anropa klassen som en funktion.
- Samma klass kan skapa flera objekt med olika attributvärden.