Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå
Avancerade klasser
Klasspolymorfism
Mål
Slutför förberedandet av några vinblandningar så att de är klara för bearbetning genom att använda klass-polymorfism.
Det finns vissa typer av specialvin som kräver mer förberedelser än andra och behöver extra tillsatser innan de kan blandas och lagras till ett riktigt vin. För att uppnå detta måste vi använda klass-polymorfism, vilket är ett sätt att optimera användningen av objekt skapade med klasser. Detta görs genom att de interna klassfunktionerna delar egenskaper så att de alla kan anropas på samma sätt trots att de kommer från olika klasser.
I kodredigeraren har du satt upp fyra (4) klasser som inkluderar fyra olika sorters vin: grape, cherry, strawberry och mango. Varje klass kommer att ha två funktioner med namnen add() och take_action(). Trots att dessa funktioner är strukturerade på samma sätt kan innehållet i dem vara olika. Varje klass behöver ha sin take_action()-funktion ifylld med ett material som ska placeras.
För att börja, gå till den ljusa X-märket och rikta dig mot skrivbordet för att läsa notisen med funktionen read(). Notera informationen som skrivs, vilken kommer att berätta vad som behöver läggas till i take_action()-funktionen för varje klass. Till exempel, i grape-klassen behöver materialet "white oak" läggas till med funktionen place() som illustrerat nedan:
# Class for making grape wine
class grape:
def __init__(self,item):
self.name = "grape"
self.item = item
# Adds materials
def add(self):
player.speak("%s are added to the %s mixture." % (self.item, self.name))
# Take actions
def take_action(self):
player.place(self.name)
# New code added
player.place("white oak")
När alla material som behöver placeras har lagts till i klassfunktionerna, gå till det gyllene X-märket och hämta ingredienser som behöver placeras i vinblandningarna. Använd funktionen collect() för att hämta en listkonstant med namnet ingredients och kontrollera innehållet med funktionen speak().
Gå till botten av kartan och samla de fyra (4) påsarna med frukt och bär, så att du har de nödvändiga komponenterna för att slutföra vinblandningen.
Nu när allt har samlats är det dags att lägga till alla material för att slutföra vinblandningarna. Skapa objekt av klasserna och initiera dem med ett argument; det ska finnas fyra (4) objekt: grape_mix, cherry_mix, strawberry_mix och mango_mix.
I varje objekt ska du ange klassen som motsvarar namnet och lägga till det material som ska blandas i enlighet med den lista du samlade. För grape läggs "nothing" till, för cherry läggs "pure water" till, för strawberry läggs "sugar" till och för mango läggs "spice" till. Som ett exempel bör ett definierat objekt se ut så här: grape_mix = grape("nothing")
När objekten har skapats är det dags att använda klass-polymorfism. Gå till det mörka X-märket under den röda mattan, rikta dig mot tunnan och använd loopen som är uppsatt i kodredigeraren. Loopen låter dig navigera till varje vintunna i den nedre raden och lägga till de element som behövs för att slutföra deras blandningar.
Den red-mattan behöver strawberry_mix, den purple-mattan behöver cherry_mix, den green-mattan behöver grape_mix och den orange-mattan behöver mango_mix. Lägg till elementen i loopen i den ordning de presenteras på kartan från vänster till höger. Till exempel:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
Som i exemplet motsvarar blandningarna hur mattorna är placerade från vänster till höger, vilket innebär att red, orange, purple motsvarar strawberry_mix, mango_mix, cherry_mix. När sekvensen är klar, gå till det mörka X-märket på den gröna mattan, rikta dig mot tunnan och gör samma sak med den andra loopen som är uppsatt i kodredigeraren. Denna gång ska loopen gå från höger till vänster med färgerna på mattorna (green, purple, orange) enligt kartan för att slutföra nivån.