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