Kap 3.2
Skapa klasser och objekt
Nu skriver vi egna klasser och skapar objekt från dem.
Mål
Efter lektionen ska du kunna...
- definiera egna klasser i Python
- skapa objekt från en klass
- använda
__init__,self, attribut och metoder - ändra ett attribut på ett objekt
Repetition
Begreppen från 3.1
- klass: mall för objekt
- objekt: instans av en klass
- attribut: data i objektet
- metod: funktion som ligger i en klass
self: objektet som används just nu
Arbetsgång
Från idé till klass
- Bestäm vad klassen representerar.
- Bestäm vilka attribut objektet behöver.
- Skriv
__init__(). - Lägg till metoder.
- Skapa objekt och testa.
Exempel
Klassen Book
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def print_info(self):
print(f"{self.title} av {self.author}")
Class
Första raden
class Book:
class säger att vi skapar en klass.
Book är klassens namn.
Kolon betyder att klassens innehåll börjar under raden.
Konstruktor
__init__ körs direkt
def __init__(self, title, author):
self.title = title
self.author = author
Den körs när ett nytt Book-objekt skapas.
Den sparar startvärden i objektet.
Attribut
Värden sparas med self
self.title = title
self.author = author
titleär parametern som kommer in.self.titleär attributet som sparas i objektet.- Varje objekt får egna attributvärden.
Metod
Objektet kan göra något
def print_info(self):
print(f"{self.title} av {self.author}")
Metoden använder objektets egna attribut.
Därför måste den ha self.
Skapa objekt
Anropa klassen
book1 = Book("1984", "George Orwell")
Book(...)skapar ett nytt objekt."1984"skickas tilltitle."George Orwell"skickas tillauthor.- Objektet sparas i variabeln
book1.
Använd objekt
Kör metoden
book1.print_info()
1984 av George Orwell
Metoden använder book1.title och book1.author.
Flera objekt
Samma klass, olika värden
book1 = Book("1984", "George Orwell")
book2 = Book("The Martian", "Andy Weir")
book1.print_info()
book2.print_info()
book1 och book2 är två olika instanser.
Utskrift
Varje objekt har egna attribut
1984 av George Orwell
The Martian av Andy Weir
Samma metod ger olika resultat eftersom objekten har olika data.
Ändra attribut
Punktnotation
book1.title = "Animal Farm"
book1.print_info()
Animal Farm av George Orwell
Det är bara book1 som ändras.
Viktigt
Klassen ändras inte
När du ändrar book1.title ändrar du ett objekt.
Du ändrar inte klassen Book.
Andra objekt från samma klass påverkas inte.
Öva
Skapa klassen Person
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print(f"Hej, jag heter {self.name} och är {self.age} år.")
Öva
Skapa två objekt
person1 = Person("Anna", 17)
person2 = Person("Erik", 18)
person1.say_hello()
person2.say_hello()
Båda objekten använder samma klass och samma metod.
Öva själv
kap3-2-person.py
- Skriv klassen
Person. - Lägg till
__init__(self, name, age). - Spara attributen med
self. - Skapa metoden
say_hello(). - Skapa två objekt och kör metoden på båda.
- Ändra åldern på ett objekt och testa igen.
Sammanfattning
Kom ihåg
classskapar en klass.__init__sätter startvärden.selfpekar på aktuellt objekt.- Objekt skapas genom att anropa klassen.
- Samma klass kan skapa flera objekt med olika värden.