Курс по усъвършенствано разработване с Python
Глава
>
Ниво
Напреднали класове
Полиморфизъм на класове
Цел
Завършете подготовката на някои винени смеси, така че те да са готови за обработка, като използвате полиморфизма на класовете.
Има определени видове специално вино, които се нуждаят от повече подготовка от други и изискват допълнителни съставки, преди да могат да бъдат смесени и оставени да узряват в правилно вино. За постигането на това трябва да използваме полиморфизма на класовете, който е начин за оптимизиране на използването на обекти, създадени с помощта на класове. Това се постига чрез това, че вътрешните функции на класовете споделят свойства, така че всички те могат да бъдат извикани по един и същи начин, въпреки че принадлежат на различни класове.
В редактора на кода ще бъдат зададени четири (4) класа, които включват четири различни вида вино: grape, cherry, strawberry и mango. Всеки клас ще има две функции, наречени add() и take_action(), като въпреки че тези функции са структурирани по един и същи начин, съдържанието им може да бъде различно. Всеки от класовете трябва да има попълнена функцията take_action() с материала, който трябва да бъде поставен.
За да започнете, отидете до светлия X знак и се обърнете към бюрото, за да прочетете бележката, използвайки функцията read(). Обърнете внимание на информацията, написана там, която ще ви каже какво трябва да бъде добавено във функцията take_action() на всеки клас. Например, в класа grape трябва да бъде добавено "white oak" чрез функцията place(), както е илюстрирано по-долу:
# 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")
След като всички материали, които трябва да бъдат поставени, бъдат добавени във функциите на класовете, отидете до златния X знак и вземете съставките, които трябва да бъдат поставени във винените смеси. Използвайте функцията collect() за да вземете списък, наречен ingredients, и проверете съдържанието му, използвайки функцията speak().
Отидете до долната част на картата и съберете четирите (4) торби с плодове и горски плодове, за да имате необходимите компоненти за завършване на винената смес.
Сега, след като всичко е събрано, е време да добавите всички материали, за да завършите винените смеси. Създайте обекти от класовете и задайте аргументите им; трябва да има четири (4) обекта: grape_mix, cherry_mix, strawberry_mix и mango_mix.
На всеки обект задайте съответстващия клас и добавете артикула, който трябва да бъде смесен, в съответствие със списъка, който сте събрали. За grape няма да се добавя нищо ("nothing"), за cherry добавете "pure water", за strawberry добавете "sugar" и за mango добавете "spice". Например, един дефиниран обект трябва да изглежда така: grape_mix = grape("nothing")
След като обектите бъдат създадени, е време да приложите полиморфизма на класовете; отидете до тъмния X знак под червения килим, обърнете се към бъчвата и използвайте цикъла, зададен в редактора на кода. Цикълът ще ви позволи да преминете през всяка винена бъчва в долния ред и да добавите елементите, които са необходими за завършване на смесите.
Червеният килим се нуждае от strawberry_mix, лилавият килим се нуждае от cherry_mix, зеленият килим се нуждае от grape_mix и оранжевият килим се нуждае от mango_mix. Добавете елементите към цикъла в реда, в който са представени на картата отляво надясно. Например:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
Както в примера, смесите отговарят на начина, по който килимите са разположени отляво надясно, което означава: червен, оранжев, лилав отговарят на strawberry_mix, mango_mix, cherry_mix. След като последователността бъде завършена, отидете до тъмния X знак на зеления килим, обърнете се към бъчвата и направете същото с втория цикъл, зададен в редактора на кода. Този път нека бъде отдясно наляво според цветовете на килимите (green, purple, orange), както е показано на картата, за да завършите нивото.