Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

เราจะใช้ตัวดำเนินการสมมูล ("ความเท่าเทียมกัน") ในคลาส Python ได้อย่างไร


หากเราใช้ตัวดำเนินการความเท่าเทียมกันตามโค้ดด้านล่าง เราจะได้ผลลัพธ์เป็นเท็จ

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

n1 = Integer(1)
n2 = Integer(1)
print bool(n1 == n2)

เอาท์พุต

False

นี่เป็นเพราะว่าโดยค่าเริ่มต้น Python ใช้ตัวระบุวัตถุสำหรับการดำเนินการเปรียบเทียบ:

เพื่อแก้ปัญหานี้ เราต้องแทนที่ __eq__function

class Integer:
    def __init__(self, number):
        self.number = number
    def __eq__(self, other):

       if isinstance(self, other.__class__):

          return self.__dict__ == other.__dict__

       return False
n1 = Integer(1)
n2 = Integer(1)
print bool (n1 == n2)
print bool (n1 != n2)

เอาท์พุต

True
True

สำหรับ Python 2.x เรายังต้องแทนที่ __ne__function ด้วยเช่นกัน สิ่งนี้ไม่จำเป็นสำหรับ Python 3.x ตามเอกสารต่อไปนี้ถือเป็นจริง

โดยค่าเริ่มต้น __ne__() จะมอบหมายให้ __eq__() และกลับผลลัพธ์เว้นแต่จะไม่ได้ใช้งาน ไม่มีความสัมพันธ์โดยนัยอื่นๆ ระหว่างตัวดำเนินการเปรียบเทียบ เช่น ความจริงของ (x