หลักสูตรการพัฒนาด้วย Python ขั้นสูง
บทที่
>
ระดับ
ชั้นเรียนขั้นสูง
การโอเวอร์โหลดการเปรียบเทียบ
เป้าหมาย
ตรวจสอบและติดป้ายพัสดุอย่างถูกต้องโดยใช้ Comparison Overloading.
ท่าเรือสำหรับการส่งสินค้า มีถังไวน์ที่พร้อมจะถูกนำออกไปยังร้านค้า แต่จำเป็นต้องมีการติดป้ายและจัดเตรียมให้เรียบร้อยเพื่อให้พนักงานสามารถเลือกหยิบและจัดส่งได้อย่างไม่มีปัญหา เพื่อทำเช่นนี้ คุณต้องใช้ Comparison Overloading ซึ่งคล้ายกับ Operator Overloading ที่ได้เรียนรู้ในบทก่อนหน้า โดยคุณต้อง overload คลาส โดยใช้ตัวดำเนินการเปรียบเทียบในครั้งนี้
ในท่าเรือมีคำสั่งซื้อทั้งหมด (3) รายการ โดยแต่ละรายการมีถัง (2) ถัง สำหรับแต่ละคำสั่งซื้อจะมีป้ายที่ออกแบบมาเพื่อแสดงอัตราส่วนของน้ำหนักในถังแต่ละใบ
ในตัวแก้ไขมีการระบุคลาสชื่อ barrel ที่อนุญาตให้คุณใช้ Comparison Overloading นอกจากนี้ยังมีฟังก์ชัน (3) ฟังก์ชันที่ตั้งค่าไว้ในตัวแก้ไข ได้แก่ less_than() , greater_than() , equal_to() ซึ่งฟังก์ชันเหล่านี้ใช้สำหรับบันทึกอัตราส่วนของน้ำหนักบนป้าย
เริ่มต้นด้วยการเดินไปยังเครื่องหมาย X สีเข้มและสีอ่อนบนพรมสีแดงแล้วเผชิญหน้ากับถัง ใช้ฟังก์ชัน read() เพื่อตรวจสอบชื่อไวน์ในถังรวมถึงน้ำหนักของถัง เช่นนี้: await player.read()
สร้างอ็อบเจ็คต์สำหรับถังสีเข้มและถังสีอ่อนโดยใช้คลาส barrel และเพิ่มข้อมูลที่คุณได้จากฟังก์ชัน read() เมื่อสร้างอ็อบเจ็คต์เหล่านี้แล้ว ให้สร้างอ็อบเจ็คต์อื่นที่ใช้เปรียบเทียบทั้งสองอ็อบเจ็คต์ ตัวอย่างเช่น:
red_barrel_dark = barrel("Wine name", 000) red_barrel_light = barrel("Wine name", 000) red_barrel_compare = red_barrel_dark < red_barrel_light
ตรวจสอบให้แน่ใจว่าได้เขียนชื่อไวน์ในอ็อบเจ็คต์ของคลาส barrel ให้ตรงกับที่แสดงในข้อความเมื่อคุณใช้ read()
สร้างอ็อบเจ็คต์โดยใช้รูปแบบการตั้งชื่อตามพรมและเครื่องหมาย X ที่มีสี สำหรับพรมสีแดง เมื่อเปรียบเทียบถัง ให้ใช้ตัวดำเนินการ < เพื่อตรวจสอบว่าถังสีเข้มน้ำหนักน้อยกว่าถังสีอ่อนหรือไม่ เพื่อสิ้นสุดส่วนนี้ ให้เดินไปยังเครื่องหมาย X สีทองบนพรมสีแดงและเผชิญหน้ากับป้าย ใช้ฟังก์ชัน less_than() กับอ็อบเจ็คต์เปรียบเทียบเพื่อบันทึกอัตราส่วนของน้ำหนักในถัง เช่นนี้: less_than(red_barrel_compare)
ต่อไป ให้เดินไปยังเครื่องหมาย X สีเข้มและสีอ่อนบนพรมสีเขียวแล้วทำกระบวนการเดียวกัน ใช้ฟังก์ชัน read() ที่เครื่องหมาย X สีเข้มและสีอ่อนและสร้างอ็อบเจ็คต์ที่สอดคล้องกับข้อมูลนั้น สำหรับอ็อบเจ็คต์เปรียบเทียบของพรมสีเขียว ครั้งนี้เราจะใช้ตัวดำเนินการ > เพื่อตรวจสอบว่าถังสีเข้มน้ำหนักมากกว่าถังสีอ่อนหรือไม่ ให้เดินไปยังเครื่องหมาย X สีทองบนพรมสีเขียวและเผชิญหน้ากับป้าย ใช้ฟังก์ชัน greater_than() กับอ็อบเจ็คต์เปรียบเทียบเพื่อบันทึกอัตราส่วนของน้ำหนักในถัง เช่นนี้: greater_than(green_barrel_compare)
เดินไปยังเครื่องหมาย X สีเข้มและสีอ่อนบนพรมสีน้ำเงินแล้วทำกระบวนการเดียวกันอีกครั้ง ใช้ฟังก์ชัน read() ที่เครื่องหมาย X สีเข้มและสีอ่อนและสร้างอ็อบเจ็คต์ที่สอดคล้องกับข้อมูลนั้น สำหรับอ็อบเจ็คต์เปรียบเทียบของพรมสีน้ำเงิน ครั้งนี้เราจะใช้ตัวดำเนินการ == เพื่อตรวจสอบว่าถังสีเข้มน้ำหนักเท่ากับถังสีอ่อนหรือไม่ ให้เดินไปยังเครื่องหมาย X สีทองบนพรมสีน้ำเงินและเผชิญหน้ากับป้าย ใช้ฟังก์ชัน equal_to() กับอ็อบเจ็คต์เปรียบเทียบเพื่อบันทึกอัตราส่วนของน้ำหนักในถัง เช่นนี้: equal_to(blue_barrel_compare)
เมื่อคำสั่งซื้อทั้งหมดได้รับการติดป้ายแล้ว ให้เดินไปยังเครื่องหมาย X สีทองบนพรมสีส้มที่อยู่ที่ทางออกของท่าเรือ เผชิญหน้ากับป้ายและใช้ฟังก์ชัน write() เพื่อบันทึกสิ่งที่อยู่ในแต่ละคำสั่งซื้อ โดยเขียนชื่อของถังแต่ละใบตามอ็อบเจ็คต์ที่คุณสร้างไว้ เช่น เมื่อพูดถึงถังบนพรมสีแดง: red_barrel_dark.name , red_barrel_light.name ทำเช่นนี้สำหรับถังทั้งหมดหกใบเพื่อทำระดับนี้ให้สำเร็จ