6. Exempel2
Programmeringsteknik
Teori | Övningar | Exempel1 | Exempel2 | Inlämningsuppgift 3: Nöjesfält |
Tänk dig att du ska skapa en klass för fordon. Det enda som du är intresserad av är vad de heter samt hur många hjul som de har.
Den metod som ska finnas ska göra att fordonet tar en åktur. Hur ska du tänka?
Är följande lösning rätt?
class Fordon: def __init__ (self, namn): self.namn = namn def bil(self, hjul): print("WROOOOOOOOM!") def cykel(self, hjul): print("PLIIING!") namn = input('Hej! Vad kul att du är här!\nVad heter du? ') fordon = Fordon(namn) val = input('Vad vill du åka idag, '+fordon.namn+'? ') if val.startswith('b'): fordon.bil(4) elif val.startswith('c'): fordon.cykel(2) else: print('Det fordonet finns inte. Hejdå', fordon.namn)
Hur skulle du göra om du vill ha ett till fordon? Enligt lösningen ovan så skulle du behöva lägga till 100 metoder om du vill ha 100 olika fordon.
Instanserna ska vara objekt av klassen, inte metoder i klassen. Klassen kan ses som en mall.
Betrakta följande lösning:
class Fordon: def __init__ (self, fordonsnamn, hjul): self.namn = fordonsnamn self.hjul = hjul def aktur(self): print(self.hjul*"WEEEEEE!") fordonslista = [Fordon('bil', 4), Fordon('cykel', 2), Fordon('trehjuling',3)] print('Hej! Vad kul att du är här!') val = int(input('Vad vill du åka idag? 1: bil, 2: cykel, 3: trehjuling')) while val in range(1,4): fordonslista[val-1].aktur() val = int(input('Vad vill du åka idag? 1: bil, 2: cykel, 3: trehjuling'))
Nu är det mycket enklare att skapa olika objekt, och det är enklare att anropa dem. Ifall vi vill att fordonen ska ha olika åkljud, så kan vi lägga med detta som ett attribut i konstruktorn.