Du tror self.teller += 1 øker klassevariabelen

Handler om: Klassevariabel

Når du skriver self.neste_nummer = self.neste_nummer + 1, LESER Python klassevariabelen, men SKRIVER en ny egenskap på det ene objektet. Den felles telleren står urørt, så alle objektene får samme nummer.

Eksempel

Tre billetter laget med self.neste_nummer += 1 i __init__ får alle nummer 1.

Slik tenker du riktig om det

Skriv klassens navn når du endrer det som er felles: Billett.neste_nummer. self. er objektets egen lomme — det du legger der, ser ingen andre.

Slik ser det ut i kode

Slik gikk det galt

class Billett:
    neste_nummer = 1

    def __init__(self):
        self.nummer = self.neste_nummer
        self.neste_nummer += 1   # øker bare dette objektet

Slik fikser du det

class Billett:
    neste_nummer = 1

    def __init__(self):
        self.nummer = Billett.neste_nummer
        Billett.neste_nummer += 1

Les om dette i boka

↓↑ naviger Enter åpne ShiftEnter ny fane Esc lukk
Velg tema
Skala