6. Exempel2

Programmeringsteknik

Hoppa till: navigering, sök
       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.