เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การตรวจสอบความเท่ากันของคลาส

ในแบบฝึกหัดก่อนหน้า คุณได้กำหนดคลาส BankAccount ที่มี attribute ชื่อ number สำหรับใช้เปรียบเทียบ แต่หากนำออบเจกต์จากคลาส BankAccount ไปเปรียบเทียบกับออบเจกต์จากคลาสอื่นที่มี attribute number เช่นกัน อาจได้ผลลัพธ์ที่ไม่คาดคิด

ตัวอย่างเช่น พิจารณาสองคลาสนี้


class Phone:
    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return self.number == \
               other.number

pn = Phone(873555333)

class BankAccount:
    def __init__(self, number):
        self.number = number

    def __eq__(self, other):
        return self.number == \
               other.number

acct = BankAccount(873555333)

การรัน acct == pn จะคืนค่า True แม้ว่าจะเป็นการเปรียบเทียบหมายเลขโทรศัพท์กับหมายเลขบัญชีธนาคารก็ตาม

แนวปฏิบัติที่ดีคือการตรวจสอบคลาสของออบเจกต์ที่ส่งเข้ามาในเมธอด __eq__() เพื่อให้แน่ใจว่าการเปรียบเทียบนั้นสมเหตุสมผล

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Python เบื้องต้นสำหรับการเขียนโปรแกรมเชิงวัตถุ

ดูคอร์ส

คำแนะนำการฝึกหัด

  • แก้ไขนิยามของ BankAccount ให้คืนค่า True เฉพาะเมื่อ attribute number มีค่าเท่ากัน และ 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(____)
แก้ไขและรันโค้ด