Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Edistyneet luokat
Luokkien polymorfismi

Tavoite

Valmistele viiniseokset loppuun, jotta ne ovat valmiita käsiteltäviksi käyttämällä luokan polymorfismia.

On olemassa tiettyjä erikoisviinityyppejä, jotka vaativat enemmän valmistelua kuin toiset ja edellyttävät lisäaineita, ennen kuin ne voidaan sekoittaa ja ikääntää oikeiksi viineiksi. Tämän saavuttamiseksi meidän on käytettävä luokan polymorfismia, joka on tapa optimoida luokilla luotujen objektien käyttöä. Tämä tehdään siten, että sisäiset luokkien funktiot jakavat ominaisuuksia, jolloin niitä voidaan kutsua samalla tavalla, vaikka ne kuuluisivat eri luokkiin.

Koodieditorissa sinulla on asetettuna neljä (4) luokkaa, jotka sisältävät neljä erilaista viinityyppiä: grape, cherry, strawberry ja mango. Jokaisella luokalla on kaksi funktiota nimeltään add() ja take_action(). Vaikka nämä funktiot on rakennettu samalla tavalla, niiden sisältö voi olla erilainen. Jokaisen luokan take_action()-funktioon tulee lisätä materiaali, joka asetetaan paikoilleen.

Aloita kävelemällä valolle X-merkkiin ja kääntymällä työpöydän puoleen lukeaksesi muistiinpanon käyttäen read()-funktiota. Merkitse ylös kirjoitettu tieto, joka kertoo, mitä tulee lisätä kunkin luokan take_action()-funktioon. Esimerkiksi grape-luokkaan tulee lisätä "white oak" käyttäen place()-funktiota, kuten alla on esitetty:

# 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")

Kun kaikki asetettavat materiaalit on lisätty luokkien funktioihin, kävele kultaiselle X-merkille ja nappaa ainekset, jotka tulee lisätä viiniseoksiin. Käytä collect()-funktiota kerätäksesi listavakion nimeltä ingredients ja tarkista sen sisältö speak()-funktion avulla.

Kävele kartan alareunaan ja kerää neljä (4) hedelmien ja marjojen pussia, jotta sinulla on tarvittavat komponentit viiniseoksen loppuun saattamiseksi.

Nyt kun kaikki on kerätty, on aika lisätä kaikki materiaalit viiniseosten loppuun saattamiseksi. Luo luokkaobjekteja ja määritä niiden argumentit; objektien tulee olla neljä (4): grape_mix, cherry_mix, strawberry_mix ja mango_mix.

Jokaisessa objektissa aseta luokka, joka vastaa nimeä, ja lisää se aine, joka täytyy sekoittaa kerätyn listan mukaisesti. grape-luokalle lisätään "nothing", cherry-luokalle lisätään "pure water", strawberry-luokalle lisätään "sugar" ja mango-luokalle lisätään "spice". Esimerkiksi määritelty objekti näyttää tältä: grape_mix = grape("nothing")

Kun objektit on luotu, on aika hyödyntää luokan polymorfismia; kävele tummalle X-merkille punaisen maton alla, käänny tynnyrin puoleen ja käytä koodieditorissa asetettua silmukkaa. Tämä silmukka mahdollistaa siirtymisen jokaiselle viinitynnyrille alarivissä ja antaa sinun lisätä seoksiin tarvittavat elementit niiden loppuun saattamiseksi.

Punainen matto tarvitsee strawberry_mix-objektin, violetti matto tarvitsee cherry_mix-objektin, vihreä matto tarvitsee grape_mix-objektin ja oranssi matto tarvitsee mango_mix-objektin. Lisää elementit silmukkaan niiden esittämisjärjestyksessä kartalla vasemmalta oikealle. Esimerkiksi:

for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()

Kuten esimerkissä, seokset vastaavat sitä, miten matot on asetettu vasemmalta oikealle, eli red, orange ja purple vastaavat strawberry_mix-objektia, mango_mix-objektia ja cherry_mix-objektia. Kun tämä järjestys on valmis, kävele tummalle X-merkille vihreän maton kohdalla, käänny tynnyriin ja toista sama toisen koodieditorissa asetetun silmukan kanssa. Tällä kertaa suorita se oikealta vasemmalle käyttäen mattojen värejä (green, purple, orange), kuten kartalla on esitetty, jotta taso saadaan päätökseen.

Koodikirja