14c Attributen veranderen
Een attribuut lees je met een punt. Met dezelfde punt en een = geef je het
een nieuwe waarde, net als bij een variabele:
class Hond:
def __init__(self, naam, leeftijd):
self.naam = naam
self.leeftijd = leeftijd
rex = Hond("Rex", 3)
bello = Hond("Bello", 7)
rex.leeftijd = 4
print(rex.leeftijd)
print(bello.leeftijd)
Uitvoer:
4
7
Alleen rex is ouder geworden. Elk object heeft zijn eigen attributen, dus
bello blijft 7.
Een attribuut met een beginwaarde
Niet elk attribuut hoeft een parameter te zijn. Een nieuwe hond heeft nog geen trucjes geleerd, dus die lijst begint voor elke hond leeg:
class Hond:
def __init__(self, naam):
self.naam = naam
self.trucjes = []
rex = Hond("Rex")
rex.trucjes.append("zitten")
rex.trucjes.append("pootje geven")
print(rex.trucjes)
Uitvoer:
['zitten', 'pootje geven']
trucjes staat niet tussen de haakjes van __init__, dus je geeft hem niet
mee bij Hond("Rex"). Hetzelfde kan met een getal, zoals een score die
op 0 begint.
Er gaat iets mis
class Hond:
def __init__(self, naam):
self.naam = naam
trucjes = []
rex = Hond("Rex")
rex.trucjes.append("zitten")
Uitvoer:
AttributeError: 'Hond' object has no attribute 'trucjes'
Zonder self. is trucjes een gewone variabele binnen __init__. Die is
weg zodra __init__ klaar is, en de hond heeft hem nooit gekregen. Schrijf
self.trucjes = [].
Opdracht 14c.1: Een speler met punten
Maak een klasse Speler met een naam en een attribuut punten dat op 0
begint. Geef de speler twee keer punten erbij en print de stand.
Verwachte uitvoer:
Noor heeft 25 punten.
class Speler:
def __init__(self, naam):
self.naam = naam
noor = Speler("Noor")
print(f"{noor.naam} heeft nog geen punten.")Klik hier voor een tip.
Zet self.punten = 0 in __init__. Punten erbij geven doe je buiten de
klasse met noor.punten += 10.
Klik hier voor de oplossing.
class Speler:
def __init__(self, naam):
self.naam = naam
self.punten = 0
noor = Speler("Noor")
noor.punten += 10
noor.punten += 15
print(f"{noor.naam} heeft {noor.punten} punten.")
Uitvoer:
Noor heeft 25 punten.
Opdracht 14c.2: Een leerling met cijfers
Maak een klasse Leerling met een naam en een lijst cijfers die leeg
begint. Maak een leerling, voeg drie cijfers toe en print het gemiddelde.
Verwachte uitvoer:
Sara heeft gemiddeld een 7.0
# Schrijf hier de klasse Leerling
print("Nog te doen")Klik hier voor een tip.
self.cijfers = [] in __init__, net als de trucjes van de hond. Het
gemiddelde is sum(sara.cijfers) / len(sara.cijfers).
Klik hier voor de oplossing.
class Leerling:
def __init__(self, naam):
self.naam = naam
self.cijfers = []
sara = Leerling("Sara")
sara.cijfers.append(7)
sara.cijfers.append(8)
sara.cijfers.append(6)
gemiddelde = sum(sara.cijfers) / len(sara.cijfers)
print(f"{sara.naam} heeft gemiddeld een {gemiddelde:.1f}")
Uitvoer:
Sara heeft gemiddeld een 7.0