Programmering nivå 2
Kap 3.3 – Metoder som ändrar objekt
Använd metoder för att läsa, ändra och kontrollera objektets data.
Mål med lektionen
När du har arbetat klart med denna lektion ska du:
- Kunna skriva metoder som läser objektets attribut.
- Kunna skriva metoder som ändrar objektets attribut.
- Förstå varför metoder kan vara bättre än att ändra attribut direkt.
Så här lär du dig bäst
Kör exemplen och följ hur objektets värden förändras. Titta särskilt på skillnaden mellan en metod som bara skriver ut information och en metod som faktiskt ändrar ett attribut.
Centrala begrepp
Du har redan mött klass, objekt, konstruktor och self. I det här kapitlet använder du
dem för att skapa metoder som styr hur objekt får ändras.
- Läsande metod: en metod som visar eller returnerar data utan att ändra objektet.
- Ändrande metod: en metod som ändrar ett eller flera attribut i objektet.
- Validering: att kontrollera att ett nytt värde är rimligt innan objektet ändras.
- Instansvariabel: ett attribut som är unikt för varje objekt, till exempel
self.year.
Kort repetition
__init__() ger objektet startvärden när objektet skapas. self betyder
"det här objektet". Nu ska metoderna få mer ansvar än att bara skriva ut text.
Metoder som läser data
En läsande metod använder objektets attribut utan att ändra dem.
class Car:
def __init__(self, brand, year):
self.brand = brand
self.year = year
def honk(self):
print(f"{self.brand} från {self.year} tutar!")
När du skapar ett objekt använder du klassen som en funktion:
car1 = Car("Volvo", 2020)
car1.honk()
Skapa sedan ett eget objekt, car2, med en egen bil och årsmodell. Då tränar du på att
samma klass kan skapa flera objekt med olika värden.
car2 = Car("Toyota", 2018)
car2.honk()
I detta exempel:
brandochyearsparas som attribut i objektet.honk()läser attributen och skriver ut ett meddelande.honk()ändrar inte bilen.
Metoder som ändrar data
En ändrande metod uppdaterar objektets attribut. Det gör att objektet får ett nytt tillstånd.
class Car:
def __init__(self, brand, year):
self.brand = brand
self.year = year
def honk(self):
print(f"{self.brand} från {self.year} tutar!")
def change_year(self, new_year):
self.year = new_year
car1 = Car("Volvo", 2020)
car1.change_year(2023)
car1.honk()
new_year är en parameter. När koden kör car1.change_year(2023) är
2023 argumentet. Metoden sparar argumentet i self.year.
Varför använda en metod för att ändra?
Du kan ändra ett attribut direkt:
car1.year = 2023
Men en metod är bättre när du vill kontrollera värdet innan objektet ändras.
def change_year(self, new_year):
if new_year > 0:
self.year = new_year
else:
print("Årtalet måste vara större än 0.")
Nu skyddar metoden objektet från ett orimligt årtal.
Interaktiv övning: ändra objekt med metod
Skapa ett Car-objekt, kör honk() och ändra sedan årtalet med en metod.
Skapa sedan en till bil med egna värden så du får ett car2-objekt. Testa också ett
negativt årtal och se varför validering behövs.
Programmering 2-koppling: honk() läser
objektets data. change_year() ändrar objektets data efter kontroll.
Öva: skriv egna metoder
- Skapa filen
kap3-3-car.py. - Skriv klassen
Carmed attributenbrandochyear. - Skriv metoden
honk()som visar bilens märke och årtal utan att ändra objektet. - Skriv metoden
change_year(new_year)som bara ändrar årtalet om det är större än 0. - Skriv metoden
is_old()som returnerarTrueom bilen är äldre än 20 år, annarsFalse. - Testa med ett giltigt årtal, ett negativt årtal och två olika bilobjekt.
När du har försökt själv kan du ladda ner ett lösningsförslag: kap3-3-car-losningsforslag.py
Sammanfattning
- Läsande metoder använder objektets data utan att ändra den.
- Ändrande metoder uppdaterar objektets attribut.
- Metoder kan validera nya värden innan objektet ändras.
- Metoder med parametrar kan ta emot nya värden, till exempel
new_year.