Продвинутый курс разработки на Python
Глава
>
Уровень
Продвинутые классы
Супер функция
Цель
Соберите различные виды мяса, затем приготовьте и подайте их различными способами, создавая объекты с помощью суперфункций.
В холодильнике находится различное мясо, которое вы можете приготовить и подать с луком, который вы подготовили с маслом на предыдущем уровне. Мясо можно приготовить различными способами и до разных температур/степеней прожарки, для чего можно создавать объекты на основе классов, как в предыдущих уровнях, но с возможностью улучшения с помощью Суперфункций.
Функция super() используется аналогично переопределению методов, разница в том, что с помощью этой функции можно запустить функцию родительского класса наряду с вашим собственным кодом в дочернем классе, вместо полного переопределения функции.
# Parent Class
class cooked_meat:
type = ""
def cook_meat(self):
player.speak("Cooking the %s meat with oil
and onions." % self.type)
player.place("meat")
player.collect("cooked %s" % self.type)
# Child Class
class ready_meat(cooked_meat):
rarity = ""
def cook_meat(self):
super().cook_meat()
player.speak("The meat is cooked %s" % self.rarity)
Внутри функции дочернего класса cook_meat() используется функция super(). Поскольку cook_meat() также является функцией, используемой в родительском классе, пользовательская функция обычно переопределяет наследуемый код из-за переопределения метода, но с помощью функции super() вы можете выполнить код из родительского класса, а также ваш новый код, написанный в дочернем классе.
Сначала подойдите к холодильнику и соберите четыре (4) куска мяса, которые вы будете использовать для приготовления. Каждый из четырех (4) видов мяса отличается друг от друга: "pork", "beef", "lamb" и "buffalo".
После того как мясо собрано, подойдите к светлой метке X и создайте объекты для каждого типа мяса, чтобы приготовить их. Для каждого объекта мяса установите тип мяса и степень прожарки, которую вы хотите получить, например:
pork_meat = ready_meat() pork_meat.type = "pork" pork_meat.rarity = "medium" pork_meat.cook_meat()
Степень прожарки — это температура приготовления, при которой вы хотите приготовить мясо. Приготовьте мясо до следующих степеней прожарки: "pork" до "medium", "beef" до "well done", "buffalo" до "medium rare" и "lamb" до "rare". На метке X используйте функцию дочернего класса cook_meat() после установки типа и степени прожарки мяса, как показано в примере выше.
После того как мясо будет приготовлено, подойдите к темной метке X на желтом ковре и используйте функцию collect(), чтобы взять как "salt", так и "pepper" из кладовки. Создайте список с именем ingredients и поместите в него два выбранных ингредиента, например: ingredients = ["salt","pepper"].
С дополнительными ингредиентами вы теперь можете подать мясо на тарелках, расположенных на столе. Создайте список для каждого приготовленного мяса со следующими именами: served_pork, served_beef, served_lamb и served_buffalo. Добавьте в эти списки приготовленное мясо вместе со списком ингредиентов, создав вложенный список, например:
served_pork = [] served_pork.append("cooked pork") served_pork.append(ingredients)
После того как списки будут созданы, подойдите к золотым меткам X и используйте функцию place(), чтобы подать мясо на тарелках, расположенных на прилавках. На верхней золотой метке X, повернувшись к столу, используйте place() для served_pork и served_buffalo. На нижней золотой метке X, повернувшись к столу, используйте place() для served_lamb и served_beef. Например: player.place(served_pork). После того как всё мясо будет подано, вы завершите уровень.