Поглиблений курс розробки на 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), як показано на мапі, щоб завершити рівень.