高级 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)来完成关卡。