Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel
Clase avansate
Polimorfism de clasă
Obiectiv
Finalizează pregătirea unor amestecuri de vin astfel încât să fie gata de procesare folosind polimorfismul de clasă.
Există anumite tipuri de vinuri de specialitate care necesită mai multă pregătire decât altele și care necesită adaosuri suplimentare înainte de a putea fi amestecate și maturate într-un vin adevărat. Pentru a realiza acest lucru, trebuie să folosim polimorfismul de clasă, care reprezintă o modalitate de a optimiza utilizarea obiectelor create cu ajutorul claselor. Acest lucru se realizează prin faptul că funcțiile interne ale claselor împărtășesc proprietăți, astfel încât toate să poată fi apelate în același mod, chiar dacă provin din clase diferite.
În editorul de cod vei avea configurate patru (4) clase care includ patru tipuri diferite de vin: grape , cherry , strawberry și mango. Fiecare clasă va avea două funcții numite add() și take_action(), deși aceste funcții sunt structurate în același mod, conținutul lor poate fi diferit. Fiecare dintre clase trebuie să aibă funcția take_action() completată cu un material ce trebuie plasat.
Pentru a începe, mergi către marca X luminoasă și îndreaptă-te spre birou pentru a citi nota folosind funcția read(). Notează-te informațiile scrise, care îți vor spune ce trebuie adăugat în funcția take_action() a fiecărei clase. De exemplu, în clasa grape trebuie adăugat "white oak" folosind funcția place() așa cum este ilustrat mai jos:
# 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")
După ce toate materialele ce trebuie plasate au fost adăugate în funcțiile claselor, mergi către marca X de aur și ia ingredientele ce trebuie adăugate în amestecurile de vin. Folosește funcția collect() pentru a prelua listarea constantă denumită ingredients și verifică conținutul folosind funcția speak().
Mergi până la capătul hărții și colectează cele patru (4) pungi cu fructe și fructe de pădure, astfel încât să ai componentele necesare pentru a termina amestecul de vin.
Acum că totul a fost colectat, este momentul să adaugi toate materialele pentru a finaliza amestecurile de vin. Creează obiecte ale claselor și completează argumentul lor; ar trebui să existe patru (4) obiecte: grape_mix , cherry_mix , strawberry_mix și mango_mix.
Pentru fiecare obiect, setează clasa care corespunde cu numele și adaugă elementul ce trebuie amestecat, conform listei pe care ai colectat-o. Pentru grape se adaugă "nothing", pentru cherry adaugă "pure water", pentru strawberry adaugă "sugar" și pentru mango adaugă "spice". Ca exemplu, un obiect definit ar trebui să arate așa: grape_mix = grape("nothing")
Odată ce obiectele au fost create, este momentul să pui în practică polimorfismul de clasă; mergi către marca X întunecată de sub covorul roșu, îndreaptă-te spre butoi și folosește ciclul de buclă stabilit în editorul de cod. Bucla îți va permite să navighezi către fiecare butoi de vin din rândul de jos și să adaugi elementele necesare pentru a le completa amestecurile.
Covorul red are nevoie de strawberry_mix, covorul purple are nevoie de cherry_mix, covorul green are nevoie de grape_mix iar covorul orange are nevoie de mango_mix. Adaugă elementele în buclă în ordinea prezentată pe hartă, de la stânga la dreapta. De exemplu:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
După cum se arată în exemplu, mixurile corespund felului în care sunt așezate covoarele de la stânga la dreapta, adică: red, orange, purple corespund strawberry_mix, mango_mix, cherry_mix. Odată ce secvența este completă, mergi către marca X întunecată de pe covorul verde, îndreaptă-te spre butoi și repetă același proces cu al doilea ciclu de buclă setat în editorul de cod. De data aceasta, asigură-te că este de la dreapta la stânga, respectând culoarea covoarelor (green, purple, orange), așa cum este prezentat pe hartă, pentru a finaliza nivelul.