การตรวจสอบความเท่ากันของคลาส
ในแบบฝึกหัดก่อนหน้า คุณได้กำหนดคลาส BankAccount ที่มี attribute ชื่อ number สำหรับใช้เปรียบเทียบ แต่หากนำออบเจกต์จากคลาส BankAccount ไปเปรียบเทียบกับออบเจกต์จากคลาสอื่นที่มี attribute number เช่นกัน อาจได้ผลลัพธ์ที่ไม่คาดคิด
ตัวอย่างเช่น พิจารณาสองคลาสนี้
|
|
การรัน acct == pn จะคืนค่า True แม้ว่าจะเป็นการเปรียบเทียบหมายเลขโทรศัพท์กับหมายเลขบัญชีธนาคารก็ตาม
แนวปฏิบัติที่ดีคือการตรวจสอบคลาสของออบเจกต์ที่ส่งเข้ามาในเมธอด __eq__() เพื่อให้แน่ใจว่าการเปรียบเทียบนั้นสมเหตุสมผล
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้นสำหรับการเขียนโปรแกรมเชิงวัตถุ
คำแนะนำการฝึกหัด
- แก้ไขนิยามของ
BankAccountให้คืนค่าTrueเฉพาะเมื่อ attributenumberมีค่าเท่ากัน และtype()ของออบเจกต์ทั้งสองที่ส่งเข้ามาเป็นประเภทเดียวกันเท่านั้น - ตรวจสอบว่า
acctและpnมีค่าเท่ากันหรือไม่
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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 class type
def __eq__(self, other):
return (self.number == other.number) ____
acct = BankAccount(873555333)
pn = Phone(873555333)
# Check if the two objects are equal
print(____)