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

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

ในแบบฝึกหัดก่อนหน้า คุณได้กำหนดคลาส 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 แม้ว่าเรากำลังเปรียบเทียบหมายเลขโทรศัพท์กับหมายเลขบัญชีธนาคารก็ตาม

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

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

การเขียนโปรแกรมเชิงวัตถุใน Python

ดูคอร์ส

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

ทั้งคลาส Phone และ BankAccount ถูกกำหนดไว้แล้ว ลองรันโค้ดตามที่มีอยู่โดยใช้ปุ่ม "รันโค้ด" แล้วตรวจสอบผลลัพธ์

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