หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
คลาสขั้นสูง
พอลิมอร์ฟิซึมของคลาส
วัตถุประสงค์
เสร็จสิ้นการเตรียมส่วนผสมไวน์ให้พร้อมสำหรับการประมวลผลโดยใช้ polymorphism ของคลาส
มีไวน์ประเภทพิเศษบางชนิดที่ต้องการการเตรียมมากกว่าชนิดอื่น ๆ และจำเป็นต้องมีการเติมส่วนผสมพิเศษก่อนที่จะสามารถผสมและหมักให้เป็นไวน์ที่ถูกต้อง เพื่อบรรลุเป้าหมายนี้เราต้องใช้ polymorphism ของคลาส ซึ่งเป็นวิธีเพิ่มประสิทธิภาพในการใช้วัตถุที่สร้างจากคลาส โดยการที่ฟังก์ชันภายในคลาสจะแชร์คุณสมบัติบางอย่าง ทำให้สามารถเรียกใช้งานได้ในรูปแบบเดียวกันแม้ว่าจะมาจากคลาสต่าง ๆ
ในโปรแกรมแก้ไขโค้ด คุณจะได้ตั้งค่าคลาสสี่ (4) คลาสซึ่งรวมถึงไวน์ประเภทต่าง ๆ สี่ชนิด: grape , cherry , strawberry และ mango แต่ละคลาสจะมีฟังก์ชันสองตัว ชื่อ add() และ take_action() แม้ว่าฟังก์ชันเหล่านี้จะมีโครงสร้างในลักษณะเดียวกัน แต่เนื้อหาภายในอาจแตกต่างกันไป โดยแต่ละคลาสจำเป็นต้องเติมโค้ดในฟังก์ชัน take_action() เพื่อระบุวัสดุที่ต้องวาง
เริ่มต้นด้วยการเดินไปยังเครื่องหมาย X สีสว่างแล้วหันไปทางโต๊ะเพื่ออ่านจดหมายโดยใช้ฟังก์ชัน read() จดบันทึกข้อมูลที่เขียนไว้ซึ่งจะบอกคุณว่าต้องเพิ่มอะไรในฟังก์ชัน take_action() ของแต่ละคลาส ตัวอย่างเช่น ในคลาส grape ต้องเพิ่ม "white oak" โดยใช้ฟังก์ชัน place() ดังที่แสดงด้านล่าง:
# 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")
เมื่อวัตถุทั้งหมดถูกสร้างขึ้นแล้ว ก็ถึงเวลาที่จะนำ polymorphism ของคลาส ไปใช้ ให้เดินไปยังเครื่องหมาย X สีมืดใต้พรมสีแดง หันไปทางถังแล้วใช้ลูปที่ตั้งค่าไว้ในโปรแกรมแก้ไขโค้ด ลูปนี้จะช่วยให้คุณเดินไปยังถังไวน์แต่ละถังในแถวล่างและเพิ่มองค์ประกอบที่จำเป็นในการเติมเต็มส่วนผสม
พรมสี red ต้องการ strawberry_mix , พรมสี purple ต้องการ cherry_mix , พรมสี green ต้องการ grape_mix และพรมสี orange ต้องการ 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) ตามที่แสดงในแผนที่เพื่อให้ผ่านด่านนี้