Presentationer Slide 1/1

Kap 3.3

Metoder som ändrar objekt

Metoder kan läsa objektets data, men också ändra den.

Mål

Efter lektionen ska du kunna...

  • skriva metoder som läser attribut
  • skriva metoder som ändrar attribut
  • förklara varför metoder kan vara bättre än direkt ändring
  • använda enkel validering innan objektet ändras

Repetition

Objekt har tillstånd

car1 = Car("Volvo", 2020)

Objektets tillstånd är värdena i attributen.

Här är brand "Volvo" och year 2020.

Begrepp

Två typer av metoder

  • Läsande metod: använder data utan att ändra objektet.
  • Ändrande metod: uppdaterar ett eller flera attribut.
  • Validering: kontrollerar värdet innan ändringen görs.

Klass

Start: Car

class Car:
    def __init__(self, brand, year):
        self.brand = brand
        self.year = year

brand och year sparas som instansvariabler.

Läsande metod

honk() ändrar inget

def honk(self):
    print(f"{self.brand} från {self.year} tutar!")

Metoden läser self.brand och self.year.

Den skriver ut text, men ändrar inte objektet.

Använd

Skapa bil och tuta

car1 = Car("Volvo", 2020)
car1.honk()
Volvo från 2020 tutar!

Efter metoden är bilen fortfarande en Volvo från 2020.

Flera objekt

Samma metod, olika data

car1 = Car("Volvo", 2020)
car2 = Car("Toyota", 2018)

car1.honk()
car2.honk()

self betyder olika objekt beroende på vilket objekt metoden körs på.

Ändrande metod

Ändra objektets år

def change_year(self, new_year):
    self.year = new_year

new_year är ett nytt värde som skickas in.

self.year ändras i objektet.

Före och efter

Objektet får nytt tillstånd

car1 = Car("Volvo", 2020)
car1.honk()

car1.change_year(2023)
car1.honk()
Volvo från 2020 tutar!
Volvo från 2023 tutar!

Parameter

Vad är new_year?

def change_year(self, new_year):
    self.year = new_year

car1.change_year(2023)
  • new_year är parametern.
  • 2023 är argumentet.
  • Argumentet sparas i self.year.

Direkt ändring

Det går att skriva så här

car1.year = 2023

Det ändrar attributet direkt.

Men ingen kontroll görs.

Därför är metoder som kontrollerar innan ändringen bättre.

Validering

Kontrollera innan ändring

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 orimliga värden.

Exempel

Fel värde stoppas

car1 = Car("Volvo", 2020)
car1.change_year(-5)
car1.honk()
Årtalet måste vara större än 0.
Volvo från 2020 tutar!

Årtalet ändras inte.

Returnera

Metod som svarar sant eller falskt

def is_old(self):
    return self.year < 2004

Metoden kan returnera True eller False.

Den ändrar inte objektet.

Hela klassen

Car med tre metoder

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):
        if new_year > 0:
            self.year = new_year
        else:
            print("Årtalet måste vara större än 0.")

    def is_old(self):
        return self.year < 2004

Öva

kap3-3-car.py

  1. Skapa klassen Car.
  2. Lägg till brand och year.
  3. Skriv honk().
  4. Skriv change_year(new_year) med kontroll.
  5. Skriv is_old().
  6. Testa giltigt år, negativt år och två objekt.

Sammanfattning

Kom ihåg

  • Läsande metoder använder data utan att ändra objektet.
  • Ändrande metoder uppdaterar attribut.
  • Metoder kan kontrollera värden innan ändring.
  • Parametrar gör att metoder kan ta emot nya värden.
  • Objektets tillstånd är värdena det har just nu.