Als developer, wil ik de speler, alle vijanden en de score in één Game-object bewaren dat ik in één keer aan de engine meegeef, zodat mijn spel niet meer op losse globals draait en de hele spelstaat overal makkelijk is door te geven.
Een attribuut hoeft geen getal of string te zijn — het mag ook een lijst zijn, of een heel ander
object. Zo bewaart je Game straks een lijst self.enemies én een
self.player. Jouw object heeft een speler en heeft vijanden.
Tot nu toe waren attributen simpele waarden: een string, een getal, een boolean. Maar een attribuut
kan élk object bevatten — ook een lijst, of een object van een andere class. Neem een
Logbook dat een lijst regels bewaart:
class Logbook:
def __init__(self):
self.entries = [] # een lijst als attribuut
log = Logbook()
log.entries.append("Start")
print(log.entries) # ['Start']
self.entries is een volwaardig lijst-object dat ín het logboek woont. Je gebruikt de
gewone lijst-methodes (append) via de punt-notatie. Zo kan een object een ander object
bevatten.
Game-object heeft een lijst vijanden en een speler, bewaard als attributen.
Klik op Maak ServerMonitor. De buitenste doos is jouw object; daarbinnen verschijnt
het echte Connection-object als attribuut self.connection.
De class Logbook (met self.entries = []) is gedefinieerd. Oefen met een
object dat een lijst-object bewaart.
log = Logbook()log.entries — wat bevat het attribuut?log.entries.append("Start") — gebruik de lijst-methode.log.entries.append("Takeoff")log.entries — en nu?Oefen de "heeft-een"-relatie met een game-class die een lijst als attribuut bewaart — bijvoorbeeld
een Wave die een lijst vijanden bijhoudt, of een Game die een lijst
kogels bijhoudt.
self.enemies = [] of self.bullets = []).Acceptatiecriteria
object.enemies.append(...)).