Coding for KidsCoding for Kids
Творческие УровниИспытанияРуководство для Учителей
Голосовать за функции
Продвинутый курс разработки на Python
Глава
>
Уровень

Продвинутые классы
Полиморфизм классов

Цель

Завершите подготовку некоторых смесей для вина, чтобы они были готовы к обработке, с использованием полиморфизма классов.

Существуют определённые типы специального вина, которые требуют больше подготовки, чем другие, и нуждаются в дополнительных компонентах, прежде чем их можно будет смешивать и бродить для получения настоящего вина. Для этого мы должны использовать полиморфизм классов, что является способом оптимизации использования объектов, созданных с помощью классов. Это достигается тем, что внутренние функции классов разделяют свойства, так что их можно вызывать одинаково, несмотря на то, что они принадлежат разным классам.

В редакторе кода у вас настроены четыре (4) класса, которые включают четыре разных типа вина: grape, cherry, strawberry и mango. Каждый класс будет иметь две функции с именами add() и take_action(). Несмотря на то, что эти функции структурированы одинаково, содержимое этих функций может быть различным. Функция take_action() каждого класса должна быть дополнена материалом, который необходимо поместить.

Для начала подойдите к световому знаку X и повернитесь к столу, чтобы прочитать записку с помощью функции read(). Обратите внимание на информацию, в которой указано, что нужно добавить в функцию take_action() каждого класса. Например, в классе grape с помощью функции place() необходимо добавить "white oak", как показано ниже:

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

Как видно из примера, смеси соответствуют расположению ковров слева направо, то есть: red, orange, purple соответствуют strawberry_mix, mango_mix, cherry_mix. После завершения последовательности подойдите к тёмному знаку X на зелёном ковре, повернитесь к бочке и выполните то же самое со вторым циклом, приведённым в редакторе кода. На этот раз цикл должен идти справа налево с учетом цветов ковров (green, purple, orange), как показано на карте, чтобы завершить уровень.

Книга Кода