Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

高级类
类多态

目标

通过使用类多态性完成一些葡萄酒混合物的准备工作,使其可以进行加工处理。

某些特制葡萄酒需要比其他葡萄酒更多的准备工作,并在混合和陈酿成正宗葡萄酒之前需要额外添加辅料。为此,我们必须使用 类多态性,这是一种优化类创建对象使用方式的方法。其原理是让类中的内部函数共享属性,从而使它们能够以相同的方式被调用,即使它们来自不同的类。

在代码编辑器中,你将已经设置好四(4)个类,这些类包括四种不同的葡萄酒:grapecherrystrawberrymango。每个类都将拥有两个名为 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_mixcherry_mixstrawberry_mixmango_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()

正如示例中所示,混合物的顺序对应于地毯从左到右的排列,也就是说:redorangepurple 分别对应 strawberry_mixmango_mixcherry_mix。完成该序列后,走向绿色地毯上带有黑色 X 标记的地方,面向酒桶,并使用代码编辑器中设置好的第二个循环以相同方式操作。这一次,根据地图所示,按照从右到左的地毯颜色顺序(greenpurpleorange)来完成关卡。

代码书