การตรวจสอบความเท่าเทียมของคลาส
ในแบบฝึกหัดก่อนหน้า คุณได้กำหนดคลาส BankAccount ที่มี attribute ชื่อ number ซึ่งใช้ในการเปรียบเทียบ แต่ถ้านำออบเจ็กต์ BankAccount ไปเปรียบเทียบกับออบเจ็กต์จากคลาสอื่นที่มี attribute number เหมือนกัน อาจได้ผลลัพธ์ที่ไม่คาดคิด
ตัวอย่างเช่น ลองพิจารณาสองคลาสนี้
|
|
การรัน acct == pn จะคืนค่า True แม้ว่าเรากำลังเปรียบเทียบหมายเลขโทรศัพท์กับหมายเลขบัญชีธนาคารก็ตาม
การตรวจสอบคลาสของออบเจ็กต์ที่ส่งเข้ามาใน method __eq__() ถือเป็นแนวปฏิบัติที่ดี เพื่อให้แน่ใจว่าการเปรียบเทียบนั้นสมเหตุสมผล
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนโปรแกรมเชิงวัตถุใน Python
คำแนะนำการฝึกหัด
ทั้งคลาส Phone และ BankAccount ถูกกำหนดไว้แล้ว ลองรันโค้ดตามที่มีอยู่โดยใช้ปุ่ม "รันโค้ด" แล้วตรวจสอบผลลัพธ์
- แก้ไขนิยามของ
BankAccountให้คืนค่าTrueเฉพาะเมื่อ attributenumberมีค่าเท่ากัน และtype()ของออบเจ็กต์ทั้งสองที่ส่งเข้ามามีค่าเหมือนกันด้วย
รันโค้ดอีกครั้งแล้วตรวจสอบผลลัพธ์
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
class BankAccount:
def __init__(self, number, balance=0):
self.number, self.balance = number, balance
def withdraw(self, amount):
self.balance -= amount
# MODIFY to add a check for the type()
def __eq__(self, other):
return (self.number == other.number)
acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)